137 votes

Python Regex - Comment obtenir les positions des correspondances

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. ).

170voto

Peter Hoffmann Points 13823
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
    print m.start(), m.group()

60voto

kanja Points 1422

Prises de

Expression régulière HOWTO

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()

1voto

EBGreen Points 14478

Voir si cela aide les objets correspondants

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