"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 capturar bloques de texto de varias líneas con expresiones regulares?

¿Cómo capturar bloques de texto de varias líneas con expresiones regulares?

Publicado el 2024-11-03
Navegar:249

How to Capture Multiline Text Blocks with Regular Expressions?

Expresión regular para hacer coincidir bloques de texto de varias líneas

La coincidencia de texto que abarca varias líneas puede presentar desafíos en la construcción de expresiones regulares. 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: la parte "algo de TEXTO variable" y todas las líneas posteriores de texto en mayúsculas, excluyendo la línea vacía.

Enfoques incorrectos:

Algunos enfoques incorrectos para resolver este problema incluyen:

  • Usar anclajes ^ y $ para hacer coincidir los saltos de línea. En el modo multilínea, ^ coincide con las posiciones que siguen a las nuevas líneas y $ coincide con las posiciones que preceden a las nuevas líneas.
  • Usar el modificador DOTALL para hacer coincidir todo, lo cual es innecesario ya que el punto (.) coincide con todo excepto las nuevas líneas.

Solución:

La siguiente expresión regular captura correctamente los componentes deseados:

^(. )\n((?:\n. ) )

Aquí hay un desglose de sus componentes:

  • ^ coincide con el inicio de la línea.
  • (. ) captura la parte "algún TEXTO variable" en el grupo 1.
  • \n coincide con un carácter de nueva línea.
  • ((?:\n. ) ) captura todas las líneas posteriores de texto en mayúsculas en el grupo 2. La construcción de grupo ?: ​​sin captura evita que estas líneas siendo capturados como grupos individuales.
  • El operador de repetición garantiza que al menos una línea de texto en mayúscula esté presente.

Uso:

Para usar esta expresión regular en Python, puede usar el siguiente código:

import re

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

Luego puede usar el método match() para encontrar coincidencias en una cadena :

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
Ú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