Correspondência de blocos multilinhas usando expressões regulares
Você pode encontrar dificuldades ao combinar texto que abrange várias linhas usando expressões regulares do Python. 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:
Várias abordagens foram tentadas sem sucesso:
re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines
Para resolver esse problema, utilize a seguinte expressão regular:
re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)
Tenha em mente que as âncoras "^" e "$" não corresponde aos feeds de linha. Portanto, no modo multilinha, "^" segue uma nova linha e "$" precede uma nova linha.
Além disso, esteja atento aos vários formatos de nova linha. Para texto que pode conter avanços de linha, retornos de carro ou ambos, use esta regex mais inclusiva:
re.compile(r"^(. )(?:\n|\r\n?)((?:(?:\n|\r\n?). ) )", re.MULTILINE)
O modificador DOTALL é desnecessário aqui porque o ponto já exclui novas linhas.
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