"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo hacer coincidir bloques multilínea en Python usando expresiones regulares?

¿Cómo hacer coincidir bloques multilínea en Python usando expresiones regulares?

Publicado el 2024-11-04
Navegar:150

How to Match Multiline Blocks in Python Using Regular Expressions?

Coincidencia de bloques multilínea usando expresiones regulares

Puede encontrar dificultades al comparar texto que abarca varias líneas usando expresiones regulares de Python. Considere el siguiente texto de ejemplo:

some Varying TEXT

DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
[more of the above, ending with a newline]
[yep, there is a variable number of lines here]

(repeat the above a few hundred times).

El objetivo es capturar dos componentes:

  • "algún TEXTO variable"
  • Todas las líneas mayúsculas ubicadas en dos líneas debajo (excluyendo los caracteres de nueva línea)

Se han intentado varios enfoques sin éxito:

re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines

Para solucionar este problema, utilice la siguiente expresión regular:

re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)

Tenga en cuenta que los anclajes "^" y "$" no coincide con los avances de línea. Por lo tanto, en el modo multilínea, "^" sigue a una nueva línea y "$" precede a una nueva línea.

Además, tenga en cuenta los distintos formatos de nueva línea. Para el texto que puede contener saltos de línea, retornos de carro o ambos, utilice esta expresión regular más inclusiva:

re.compile(r"^(. )(?:\n|\r\n?)((?:(?:\n|\r\n?). ) )", re.MULTILINE)

El modificador DOTALL no es necesario aquí porque el punto ya excluye las nuevas líneas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3