Comment obtenir les positions de début et de fin de toutes les correspondances à l'aide du module re
? Par exemple, étant donné le motif r'[a-z]'
et la chaîne 'a1b2c3d4'
Je voudrais connaître les positions où chaque lettre est trouvée. Idéalement, j'aimerais également obtenir le texte du match.
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
Pris à partir de
Guide des expressions rationnelles
span () renvoie les index de début et de fin dans un seul Tuple. Puisque la méthode de correspondance ne vérifie que si le RE correspond au début d'une chaîne, start () sera toujours zéro. Toutefois, la méthode de recherche des occurrences RegexObject analyse la chaîne, de sorte que la correspondance 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:
Dans Python 2.2, la méthode finditer () est également disponible et renvoie une séquence d'occurrences MatchObject en tant qu'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 pouvoir faire quelque chose de l'ordre de
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
Pour Python 3.x
from re import finditer
for match in finditer("pattern", "string"):
print(match.span(), match.group())
Vous obtiendrez \n
tuples séparés (comprenant le premier et le dernier index de la correspondance, respectivement) et la correspondance elle-même, pour chaque résultat de la chaîne.
notez que le span et le groupe sont indexés pour des groupes de capture multiples dans une expression rationnelle
regex_with_3_groups=r"([a-z])([0-9]+)([A-Z])"
for match in re.finditer(regex_with_3_groups, string):
for idx in range(0, 4):
print(match.span(idx), match.group(idx))