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

Susan Sarandon
Libérer: 2024-10-24 22:16:02
original
742 Les gens l'ont consulté

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).
Copier après la connexion

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>
Copier après la connexion

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

<code class="python">re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!