405 votes

Comment trouver toutes les correspondances d'une expression régulière en Python ?

Dans un programme que je suis en train d'écrire, Python doit utiliser la fonction re.search() pour trouver des correspondances dans un bloc de texte et imprimer les résultats. Cependant, le programme se termine dès qu'il trouve la première correspondance dans le bloc de texte.

Comment faire pour que le programme ne s'arrête pas tant que TOUTES les correspondances n'ont pas été trouvées ? Existe-t-il une fonction séparée pour faire cela ?

0 votes

REs récursifs sont une bête différente. Vous voulez répéter la recherche.

715voto

Amber Points 159296

Utilice re.findall o re.finditer à la place.

re.findall(pattern, string) renvoie une liste de chaînes de caractères correspondantes.

re.finditer(pattern, string) renvoie un itérateur sur MatchObject objets.

Exemple :

re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')
# Output: ['cats', 'dogs']

[x.group() for x in re.finditer( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')]
# Output: ['all cats are', 'all dogs are']

28 votes

finditer était ce que je recherchais. Je suis surpris que l'un renvoie des objets Match et l'autre des chaînes de caractères. Je m'attendais à utiliser un match_all o match_iter fonction.

31 votes

CLAUSE DE NON-RESPONSABILITÉ : ceux qui trouveront seulement sans chevauchement correspond à

4 votes

@AntoineLizée, comment trouve-t-on des itérations AVEC chevauchement ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X