¿Cómo extraer la lista de texto entre el patrón utilizando Expresiones Regulares?
Tengo un texto como este:
05/06/21 05/06/21 Margin Div/Int - Income ACTIVISION BLIZZARD INC
COM
Pagadero: 05/06/2021
DIVIDENDOS CUALIFICADOS 23.50
ATVI - 0.00 23.50 (9,425.77)
05/13/21 05/13/21 Margin Div/Int - Income APPLE INC
COM
Pagadero: 05/13/2021
DIVIDENDOS CUALIFICADOS 6.16
AAPL - 0.00 6.16 (9,419.61)
05/28/21 05/28/21 Margin Div/Int - Income STARBUCKS CORP
COM
Pagadero: 05/28/2021
DIVIDENDOS CUALIFICADOS 18.00
SBUX - 0.00 18.00 (9,401.61)
05/28/21 05/28/21 Margin Div/Int - Expense CARGO DE INTERESES DE MARGEN
Pagadero: 05/28/2021
- - 0.00 (73.03) (9,474.64)
Deseo extraer cada registro individual, como estos:
05/06/21 05/06/21 Margin Div/Int - Income ACTIVISION BLIZZARD INC
COM
Pagadero: 05/06/2021
DIVIDENDOS CUALIFICADOS 23.50
ATVI - 0.00 23.50 (9,425.77)
05/13/21 05/13/21 Margin Div/Int - Income APPLE INC
COM
Pagadero: 05/13/2021
DIVIDENDOS CUALIFICADOS 6.16
AAPL - 0.00 6.16 (9,419.61)
05/28/21 05/28/21 Margin Div/Int - Expense CARGO DE INTERESES DE MARGEN
Pagadero: 05/28/2021
- - 0.00 (73.03) (9,474.64)
El patrón de cada registro debe comenzar con la fecha (\d+/\d+/\d)
y terminar con (\n\n\d+/\d+/\d+)
.
He intentado usar (re.findall(r'\d+/\d+/\d(.*?)\n\n\d+/\d+/\d+', a))
, pero no funciona como se esperaba.
davy.ai
Para extraer registros individuales basados en el patrón que comienza con una fecha y termina con un salto de línea doble y otra fecha, la expresión regex correcta sería:
Aquí, se utiliza el método
re.findall()
para buscar todas las instancias del patrón en el texto de entrada y devolver una lista de subcadenas coincidentes. El patrón en sí utiliza una combinación de elementos regex para coincidir con los registros deseados:\d+/\d+/\d+
coincide con una cadena de fecha en formato dd/mm/aa.*?
coincide con todos los caracteres entre la fecha de inicio y la fecha de fin(?=\n\n\d+/\d+/\d+|$)
utiliza una búsqueda hacia adelante positiva para coincidir con el salto de línea doble y la cadena de fecha que marcan el final del registro, o el final de la cadena de entrada si no hay más registros que coincidan.Finalmente, se utiliza la bandera
re.DOTALL
para asegurarse de que el punto (.) coincida con todos los caracteres, incluyendo saltos de línea.Ten en cuenta que el texto que se va a buscar debe estar entre comillas y asignado a la variable
text
antes de ejecutar el código regex. La lista resultante de registros coincidentes se almacenará en la variablerecords
.