Faire correspondre des blocs de texte multilignes avec des expressions régulières en Python
En Python, la correspondance d'expressions régulières peut être difficile lorsqu'il s'agit de texte multiligne . Par exemple, considérons le texte suivant où « n » représente une nouvelle ligne :
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 éléments :
Des tentatives précédentes utilisant des variantes des expressions régulières suivantes ont été échec :
re.compile(r"^>(\w+)$$(\[.$]+)^$", re.MULTILINE) re.compile(r"(^[^>]\[\w\s]+)$", re.MULTILINE|re.DOTALL)
Solution :
Pour faire correspondre correctement le texte multiligne, utilisez l'expression régulière suivante :
re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)
Ceci Le motif correspond aux éléments suivants :
Points clés :
Solution alternative :
Si le texte cible peut contenir d'autres types de sauts de ligne en plus des sauts de ligne (n), utilisez la version plus inclusive suivante :
re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)
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!