86 votes

Nombre de correspondances d'expression régulière

J'utilise la fonction finditer dans le re pour faire correspondre certaines choses et tout fonctionne.

Maintenant, je dois savoir combien de matchs j'ai. Est-ce possible sans parcourir deux fois l'itérateur ? (un pour connaître le décompte puis l'itération réelle)

Un peu de code :

 imageMatches = re.finditer("<img src\=\"(?P<path>[-/\w\.]+)\"", response[2])
# <Here I need to get the number of matches>
for imageMatch in imageMatches:
    doStuff

Tout fonctionne, j'ai juste besoin d'obtenir le nombre de correspondances avant la boucle.

126voto

JoshD Points 7303

Si vous savez que vous voudrez toutes les correspondances, vous pouvez utiliser la fonction re.findall . Il renverra une liste de tous les matchs. Ensuite, vous pouvez simplement faire len(result) pour le nombre de correspondances.

10voto

Mods Vs Rockers Points 751
#An example for counting matched groups
import re

pattern = re.compile(r'(\w+).(\d+).(\w+).(\w+)', re.IGNORECASE)
search_str = "My 11 Char String"

res = re.match(pattern, search_str)
print(len(res.groups())) # len = 4  
print (res.group(1) ) #My
print (res.group(2) ) #11
print (res.group(3) ) #Char
print (res.group(4) ) #String

6voto

Rafe Kettler Points 29389

Si vous trouvez que vous devez vous en tenir à finditer() , vous pouvez simplement utiliser un compteur pendant que vous parcourez l'itérateur.

Exemple:

 >>> from re import *
>>> pattern = compile(r'.ython')
>>> string = 'i like python jython and dython (whatever that is)'
>>> iterator = finditer(pattern, string)
>>> count = 0
>>> for match in iterator:
        count +=1
>>> count
3

Si vous avez besoin des fonctionnalités de finditer() (ne correspondant pas aux instances qui se chevauchent), utilisez cette méthode.

5voto

Travis Jones Points 21

Je sais que c'est un peu vieux, mais ceci mais voici une fonction concise pour compter les modèles de regex.

 def regex_cnt(string, pattern):
    return len(re.findall(pattern, string))

string = 'abc123'

regex_cnt(string, '[0-9]')

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