"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-04
Parcourir:516

How to Match Multiline Blocks in Python Using Regular Expressions?

Correspondance de blocs multilignes à l'aide d'expressions régulières

Vous pouvez rencontrer des difficultés lors de la mise en correspondance d'un texte s'étendant 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).

Le but est de capturer deux composants :

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

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

re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines

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

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

Gardez à l'esprit que les ancres "^" et "$" ne correspond 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 :

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

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3