ici c'est: pourquoi Suivi strong> p> code est comme suit p> pourquoi ne peut pas si groupes () code> ne me donne rien, mais groupe (0) code> donne quelques-enrichies? Quelle est la différence? P> WASTALL code> peut me procurer tous les - \ w + \ w + code> Substrings, mais regardez ceci: p> Rechercher code> Donnez-moi toutes les sous-chaînes? P> s = 'abc -jk -lm -ko code> et p>
3 Réponses :
La première capture explicite de votre regex est indiquée par rep-up modifier: p>
Pourquoi ne peut pas groupes () code> ne renvoie que des groupes explicitement capturés dans votre regex (notés par ( code> Supports ronds ) code> dans votre regex), tandis que groupe (0) code> renvoie toute la sous-chaîne correspondant à votre regex, que votre expression ait des groupes de capture. P>
groupe (1) code> à la place. P>
recherche code> Donnez-moi toutes les sous-chaînes? p>
blockQuote>
recherche () code> retournera la première correspondance par rapport au motif de votre chaîne d'entrée. P>
@Alcott: J'ai ajouté une réponse de suivi.
@Joel Cornett: Je m'ennuyais de "parenthèses".
Mais regardez ce que je mets dans recherche code>. J'ai écrit re.search ('(- \ w + \ w +) +', s) code>, voir? Il y a un + code> juste après le modèle (- \ w + \ w +) code>. Donc, je suppose que la recherche devrait me donner plus d'une sous-chaîne correspondant au modèle, non?
@ALCOTT: Votre premier ensemble de - \ w + \ w + code> est directement suivi d'un espace qui n'est pas couvert par le motif, il ne peut donc pas regarder au-delà de votre première sous-chaîne.
Votre regex n'a aucun groupe de correspondance, indiqué par des parens ( (...) code>). p>
Permettez-moi d'expliquer avec un petit exemple explication: groupe () ou groupe (0) -> il donnera une chaîne complète avec la valeur correspondant à votre expression régulière. P> groupe (1) donnera La valeur correspondante du premier motif p> groupe (2) donnera une deuxième valeur correspondante de modèle .... p> p> Groupes () code> est un type tuple qui a toutes les valeurs correspondant à votre expression régulière. . P> Groupes (0) CODE> ou Groupes () CODE> ou Groupes (1) CODE> .... il n'imprime que tout les valeurs p>
J'aime cette réponse.
Le comportement standard dans la plupart des saveurs d'expression régulières est de remplacer i> tout contenu d'un groupe lorsqu'il est capturé plus d'une fois au lieu de générer des groupes supplémentaires pour chaque passage. Si vous voulez les capturer, vous devrez effectuer une recherche à plusieurs reprises.
re.findall () code> devrait être utile dans votre cas.@Danielkza, mais pourquoi
groupes () code> m'a donné'- L m' code> pas'- j k' code>?Le premier passage de la répétition correspondant au
-j k code>. La deuxième passe a ensuite écrasé le match stocké avec un nouveau,-l m code>. S'il y avait encore plus de correspondances suivantes, le dernier serait celui qui est stocké. Je ne pouvais pas vous dire pourquoi i> Ce comportement existe, mais il est présent dans pratiquement toutes les saveurs d'expression régulières. Si vous souhaitez capturer tous les matchs, vous devez appliquer le motif plusieurs fois.