Maison >développement back-end >Tutoriel Python >Comment faire correspondre des blocs multilignes en Python à l'aide d'expressions régulières ?

Comment faire correspondre des blocs multilignes en Python à l'aide d'expressions régulières ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 22:16:02844parcourir

How to Match Multiline Blocks in Python Using Regular Expressions?

Faire correspondre des blocs multilignes à l'aide d'expressions régulières

Vous pouvez rencontrer des difficultés lors de la mise en correspondance d'un texte qui s'étend sur plusieurs lignes à l'aide des expressions régulières de Python. Prenons l'exemple de texte suivant :

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

L'objectif est de capturer deux composants :

  • "du TEXTE variable"
  • Toutes les lignes majuscules situées deux lignes en dessous (à l'exclusion des caractères de nouvelle ligne)

Plusieurs approches ont été tentées sans succès :

<code class="python">re.compile(r"^>(\w+)$$(\n[.$]+)^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s]+)$", re.MULTILINE|re.DOTALL) # Just textlines</code>

Pour résoudre ce problème, utilisez l'expression régulière suivante :

<code class="python">re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>

Gardez à l'esprit que les ancres "^" et "$" ne correspondent pas aux sauts de ligne. Par conséquent, en mode multiligne, "^" suit une nouvelle ligne et "$" précède une nouvelle ligne.

De plus, soyez attentif aux différents formats de nouvelle ligne. Pour le texte pouvant contenir des sauts de ligne, des retours chariot ou les deux, utilisez cette expression régulière plus inclusive :

<code class="python">re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)</code>

Le modificateur DOTALL n'est pas nécessaire ici car le point exclut déjà les nouvelles lignes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn