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