Comportement différent entre re.finditer et re.findall
Je suis en utilisant le code suivant:
CARRIS_REGEX=r'<th>(\d+)</th><th>([\s\w\.\-]+)</th><th>(\d+:\d+)</th><th>(\d+m)</th>'
pattern = re.compile(CARRIS_REGEX, re.UNICODE)
matches = pattern.finditer(mailbody)
findall = pattern.findall(mailbody)
Mais finditer et findall sont de trouver des choses différentes. Findall trouve en effet tous les matchs dans la chaîne donnée. Mais finditer ne trouve que le premier, de retour d'un itérateur, avec un seul élément.
Comment puis-je faire finditer et findall se comportent de la même façon?
Grâce
source d'informationauteur simao
Vous devez vous connecter pour publier un commentaire.
Je ne peux pas reproduire ici. Ai essayé avec Python 2.7 et 3.1.
Une différence entre
finditer
etfindall
est que le premier renvoie regex match des objets, alors que l'autre renvoie un tuple de la correspondance de capturer les groupes (ou le match en entier si il n'y a pas de capturer les groupes).Donc
imprime
Si vous voulez la même sortie de
finditer
que vous obtenez à partir defindall
vous avez besoinVous ne pouvez pas les faire se comporter de la même façon, parce qu'ils sont différents. Si vous voulez vraiment créer une liste de résultats de
finditer
alors vous pouvez utiliser une liste de compréhension:En général, utilisez un
for
boucle pour accéder aux résultats fournis par l're.finditer
: