¿Cómo dividir una cadena en Python según el separador con separador como parte de uno de los trozos?

Hamza

Buscando una forma elegante de:

  1. Dividir una cadena según un separador
  2. En lugar de descartar el separador, conviértalo en parte de los trozos partidos.

Por ejemplo, tengo datos de fecha y hora como:

D2018-4-21T3:55+6
2018-4-4T3:15+6
D2018-11-21T12:45+6:30

A veces hay D, a veces no (sin embargo, siempre quiero que sea parte del primer fragmento), no hay ceros al final o al principio de la hora y la zona horaria solo tiene ':' a veces. El punto es que es necesario dividir estos caracteres 'D, T, +' porque es posible que los segmentos no sigan la longitud de sae. Si lo fueran, sería más fácil dividirlos sobre la base del índice. Quiero dividirlos en varios caracteres como T y + y tenerlos como parte de los datos, así como:

['D2018-4-21', 'T3:55', 'TZ+6']
['D2018-4-4', 'T3:15', 'TZ+6']
['D2018-11-21', 'T12:45', 'TZ+6:30']

Sé que una forma más agradable sería limpiar los datos primero y normalizar todas las filas para seguir el mismo patrón, pero tengo curiosidad por saber cómo hacerlo como está.

Por ahora, mi fea solución se ve así:

[i+j for _, i in enumerate(['D','T','TZ']) for __, j in enumerate('D2018-4-21T3:55+6'.replace('T',' ').replace('D', ' ').replace('+', ' +').split()) if _ == __]
Boying

Utilizar una regular expression

Referencia: https://docs.python.org/3/library/re.html

(...)

Coincide con cualquier expresión regular que se encuentre entre paréntesis e indica el inicio y el final de un grupo; el contenido de un grupo se puede recuperar después de que se haya realizado una coincidencia, y se puede emparejar más adelante en la cadena con la secuencia especial \ number, que se describe a continuación. Para hacer coincidir los literales '(' o ')', use (o), o enciérrelos dentro de una clase de caracteres: [(], [)].

import re
a = '''D2018-4-21T3:55+6
2018-4-4T3:15+6
D2018-11-21T12:45+6:30'''

b = a.splitlines()
for i in b:
    m = re.search(r'^D?(.*)([T].*?)([-+].*)$', i)
    if m:
        print(["D%s" % m.group(1), m.group(2), "TZ%s" % m.group(3)])

Resultado:

['D2018-4-21', 'T3:55', 'TZ+6']
['D2018-4-4', 'T3:15', 'TZ+6']
['D2018-11-21', 'T12:45', 'TZ+6:30']

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo