Yanıtlar:
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
start()
bir grup numarasını kabul edebilir, bu nedenle n'inci grubun bir dizinini istiyorsanızstart(n)
Den alınan
span (), tek bir dizide hem başlangıç hem de bitiş dizinlerini döndürür. Eşleşme yöntemi yalnızca RE'nin bir dizenin başında eşleşip eşleşmediğini kontrol ettiğinden, start () her zaman sıfır olacaktır. Ancak, RegexObject örneklerinin arama yöntemi dizeyi tarar, bu nedenle bu durumda eşleşme sıfırdan başlamayabilir.
>>> 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)
Bunu şununla birleştir:
Python 2.2'de, bir dizi MatchObject örneğini yineleyici olarak döndüren finditer () yöntemi de mevcuttur.
>>> 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)
sırasına göre bir şeyler yapabilmelisin
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
re.search(r'abbit', "has abbit of carrot").span(0)
-(4, 9)
yayılma ve grubun bir normal ifadede çoklu yakalama grupları için dizine alındığını unutmayın
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))
4
geliyor