Si j'ai une grande chaîne avec plusieurs lignes et que je veux faire correspondre une partie d'une ligne uniquement à la fin de cette ligne, quelle est la meilleure façon de le faire?
Donc, par exemple, j'ai quelque chose comme ça et Je veux qu'il arrête de faire correspondre quand il atteint le nouveau caractère de ligne. p> J'ai vu cela dans un réponse précédente : p> $ - indique la correspondance à la fin de la chaîne ou à la fin d'une ligne si
multiline est activé. p>
blockQuote> Ma question est alors comment "activer Multiline" comme l'auteur de cette réponse étatique? P> P>
3 Réponses :
regarder le paramètre drapeaux code> sur http: / /docs.python.org/library/re.html#module-Contents P>
Ceci n'est pas utile - permettant au mode multiligne ne résoudra pas son problème.
Droite, et si quelqu'un vous demande s'il devait tenir son marteau vers le haut ou vers le bas pour conduire dans une vis, vous ne lui diriez pas d'utiliser un tournevis à la place :)
Vous pouvez activer la correspondance multiline en passant Il y a trois solutions à ceci: p>
re.multiline code> comme deuxième argument sur
re.compile () code>. Cependant, il y a une subtilitée à surveiller: car le quantificateur
+ code> est gourmand, cette expression régulière correspondra aussi longtemps que possible une chaîne possible, alors si la ligne suivante est composée de lettres et d'espaces, La regex peut correspondre à plus d'une ligne (
$ code> correspond à la fin de n'importe quelle chaîne em>). p>
\ s code>) Votre jeu de caractères répété ne correspond pas à la nouvelle ligne. LI>
+? code>, la version non gourmande ("minimale") de
+ code>, de sorte qu'il correspond à une chaîne aussi courte que possible et donc arrêtez-vous au premier em> nouvelle ligne. li>
text.split ('\ n') code>. li>.
ol>
Merci pour les solutions! Le premier semble le plus facile à mettre en œuvre. Savez-vous spécifiquement comment je peux spécifier, je veux seulement que des espaces simples soient appariés par opposition à tout blancheur? J'ai essayé la deuxième solution mais cela ne correspond que d'un seul caractère.
Mon mauvais, aurait dû mentionner - pour toutes ces solutions, vous devez également inclure l'ancre $ code> (fin de chaîne) à la fin. De cette façon, avec la solution 2,
re code> trouvera la chaîne la plus courte correspondant au regex et i> monte jusqu'à la fin d'une ligne, ce qui correspond à ce que vous voulez. Pour la solution 1, un espace peut être représenté dans un caractère défini par un espace littéral - aucune évasion requise (c'est-à-dire
[a-za-z.] Code>)
Utilisez simplement
r"(?P<name>[A-Za-z\t .]+)"