web-dev-qa-db-fra.com

Pourquoi re.groups () ne me donne-t-il rien pour mon seul groupe correctement apparié?

Lorsque j'exécute ce code:

print re.search(r'1', '1').groups() 

J'obtiens un résultat de (). Cependant, .group(0) me donne la correspondance.

groups() ne devrait-il pas me donner quelque chose contenant la correspondance?

Mise à jour: Merci pour les réponses. Cela signifie donc que si je fais re.search() sans sous-groupes, je ai pour utiliser groups(0) pour obtenir une correspondance?

29
dtc

groups est vide car vous n'avez aucun groupe de capture - http://docs.python.org/library/re.html#re.MatchObject.groups . group (0) renvoie toujours tout le texte qui a été mis en correspondance, qu'il ait été capturé dans un groupe ou non

Édité.

21
arunkumar

À ma connaissance, .groups() renvoie un Tuple de groupes mémorisés. C'est à dire. les groupes de l'expression régulière entre parenthèses. Donc, si vous deviez écrire:

print re.search(r'(1)', '1').groups()

vous obtiendriez

('1',)

comme réponse. En général, .groups() renverra un Tuple de tous les groupes d'objets dans l'expression régulière qui sont placés entre parenthèses.

23
HodofHod

La raison en est que vous n'avez pas de groupes de capture (puisque vous n'utilisez pas () Dans le modèle). http://docs.python.org/library/re.html#re.MatchObject.groups

Et group(0) renvoie l'intégralité du résultat de la recherche (même s'il ne contient aucun groupe de capture): http://docs.python.org/library/re.html#re.MatchObject.group

5
ovgolovin

Vous n’avez aucun groupe dans votre expression régulière, vous obtenez donc une liste vide (()) à la suite.

Essayer

re.search(r'(1)', '1').groups()

Avec les crochets que vous créez un groupe de capture, le résultat qui correspond à cette partie du motif est stocké dans un groupe.

Ensuite, vous obtenez

('1',)

à la suite.

3
stema