Comment obtenir les positions de début et de fin de tous les matches en utilisant le module re
? Par exemple, étant donné le modèle r'[a-z]'
et la chaîne 'a1b2c3d4'
j'aimerais connaître les positions où chaque lettre est trouvée (idéalement, j'aimerais également obtenir le texte de la correspondance. ).
Réponses
Trop de publicités?Prises de
span() renvoie la les deux de début et de fin d'index dans un unique n-uplet. Depuis le match méthode vérifie seulement si elle correspond au début d'une chaîne de caractères, start() sera toujours zéro. Cependant, la méthode de recherche de RegexObject les instances analyses par la chaîne, de sorte que le match ne peut pas commencer à zéro dans ce cas.
>>> p = re.compile('[a-z]+')
>>> print p.match('::: message')
None
>>> m = p.search('::: message') ; print m
<re.MatchObject instance at 80c9650>
>>> m.group()
'message'
>>> m.span()
(4, 11)
Combinez cela avec:
En Python 2.2, le finditer() la méthode est également disponible, de retour d'une séquence de MatchObject cas un itérateur.
>>> p = re.compile( ... )
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
... print match.span()
...
(0, 2)
(22, 24)
(29, 31)
vous devriez être en mesure de faire quelque chose de l'ordre de
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
Voir si cela aide les objets correspondants