Answers:
import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
print(m.start(), m.group())
start()
可能会接受一个组号,因此,如果您想要第n个组的索引,请使用start(n)
取自
span()在单个元组中返回开始索引和结束索引。由于match方法仅检查RE是否在字符串开头匹配,因此start()始终为零。但是,RegexObject实例的搜索方法将扫描字符串,因此在这种情况下,匹配可能不会从零开始。
>>> 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)
结合使用:
在Python 2.2中,finditer()方法也可用,它返回一个MatchObject实例序列作为迭代器。
>>> 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)
您应该能够按以下顺序进行操作
for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
print match.span()
re.search(r'abbit', "has abbit of carrot").span(0)
-(4, 9)
请注意,跨度和组在正则表达式中被索引为多个捕获组
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
来的?