11
votes

Quelle est la différence entre les groupes et le groupe dans le module Re?

ici c'est: xxx

pourquoi groupes () ne me donne rien, mais groupe (0) donne quelques-enrichies? Quelle est la différence?

Suivi

code est comme suit xxx

WASTALL peut me procurer tous les - \ w + \ w + Substrings, mais regardez ceci: xxx

pourquoi ne peut pas Rechercher Donnez-moi toutes les sous-chaînes?

à nouveau

si s = 'abc -jk -lm -ko et xxx


3 commentaires

Le comportement standard dans la plupart des saveurs d'expression régulières est de remplacer 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 () devrait être utile dans votre cas.


@Danielkza, mais pourquoi groupes () m'a donné '- L m' pas '- j k' ?


Le premier passage de la répétition correspondant au -j k . La deuxième passe a ensuite écrasé le match stocké avec un nouveau, -l m . S'il y avait encore plus de correspondances suivantes, le dernier serait celui qui est stocké. Je ne pouvais pas vous dire pourquoi 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.


3 Réponses :


23
votes

groupes () ne renvoie que des groupes explicitement capturés dans votre regex (notés par ( Supports ronds ) dans votre regex), tandis que groupe (0) renvoie toute la sous-chaîne correspondant à votre regex, que votre expression ait des groupes de capture.

La première capture explicite de votre regex est indiquée par groupe (1) à la place.

rep-up modifier:

Pourquoi ne peut pas recherche Donnez-moi toutes les sous-chaînes?

recherche () retournera la première correspondance par rapport au motif de votre chaîne d'entrée.


4 commentaires

@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 . J'ai écrit re.search ('(- \ w + \ w +) +', s) , voir? Il y a un + juste après le modèle (- \ w + \ w +) . 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 + 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.



1
votes

Votre regex n'a aucun groupe de correspondance, indiqué par des parens ( (...) ).


0 commentaires

8
votes

Permettez-moi d'expliquer avec un petit exemple xxx

explication: Groupes () est un type tuple qui a toutes les valeurs correspondant à votre expression régulière. .

Groupes (0) ou Groupes () ou Groupes (1) .... il n'imprime que tout les valeurs

groupe () ou groupe (0) -> il donnera une chaîne complète avec la valeur correspondant à votre expression régulière.

groupe (1) donnera La valeur correspondante du premier motif

groupe (2) donnera une deuxième valeur correspondante de modèle ....


1 commentaires

J'aime cette réponse.