es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    import re
    
    text = "tu texto aquí"
    records = re.findall(r"\d+/\d+/\d+.*?(?=\n\n\d+/\d+/\d+|$)", text, re.DOTALL)
    

    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 variable records.

Comments are closed.