"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como capturar blocos de texto multilinhas com expressões regulares?

Como capturar blocos de texto multilinhas com expressões regulares?

Publicado em 2024-11-03
Navegar:691

How to Capture Multiline Text Blocks with Regular Expressions?

Expressão regular para correspondência de blocos de texto multilinha

A correspondência de texto que abrange várias linhas pode apresentar desafios na construção de expressões regulares. Considere o seguinte texto de exemplo:

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)

O objetivo é capturar dois componentes: a parte "algum TEXTO Variável" e todas as linhas subsequentes de texto em maiúsculas, excluindo a linha vazia.

Abordagens incorretas:

Algumas abordagens incorretas para resolver esse problema incluem:

  • Usar âncoras ^ e $ para corresponder aos feeds de linha. No modo multilinha, ^ corresponde às posições seguintes às novas linhas e $ corresponde às posições anteriores às novas linhas.
  • Usando o modificador DOTALL para corresponder a tudo, o que é desnecessário, pois o ponto (.) corresponde a tudo, exceto novas linhas.

Solução:

A seguinte expressão regular captura corretamente os componentes desejados:

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

Aqui está uma análise de seus componentes:

  • ^ corresponde ao início da linha.
  • (. ) captura a parte "some Varying TEXT" no grupo 1.
  • \n corresponde a um caractere de nova linha.
  • ((?:\n. ) ) captura todas as linhas subsequentes de texto maiúsculo no grupo 2. A construção de grupo ?: ​​sem captura impede que essas linhas sendo capturados como grupos individuais.
  • O operador de repetição garante que pelo menos uma linha de texto maiúsculo esteja presente.

Uso:

Para usar esta expressão regular em Python, você pode usar o seguinte código:

import re

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

Você pode então usar o método match() para encontrar correspondências em uma string :

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3