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