这是我最初的做法:
string = '1'*15
result = re.finditer(r'(?=11111)', string) # overlapped = True
# Doesn't work for me
for i in result: # python 3.5
print(i.start(), i.end())
它找到所有重叠的匹配,但无法获得正确的结束索引。 输出:
1 <_sre.SRE_Match object; span=(0, 0), match=''>
2 <_sre.SRE_Match object; span=(1, 1), match=''>
3 <_sre.SRE_Match object; span=(2, 2), match=''>
4 <_sre.SRE_Match object; span=(3, 3), match=''>
(and so on..)
我的问题: 如何找到所有重叠匹配,并将所有开始和结束索引都正确?
答案 0 :(得分:4)
你得到的问题与前瞻是zero-width assertion消耗(即增加匹配结果)没有文字的事实有关。它只是字符串中的一个位置。因此,所有匹配都在字符串中的相同位置开始和结束。
您需要使用capturing group(即(?=(11111))
)包围前瞻模式,并访问 1 组的开始和结束(i.start(1)
和{{ 1}}):
i.end(1)
请参阅Python demo,其输出为
import re
s = '1'*15
result = re.finditer(r'(?=(11111))', s)
for i in result:
print(i.start(1), i.end(1))
答案 1 :(得分:1)
您能否与此实施进行比较,看看差异可能在哪里。
match = re.finditer(r'111','test111 end111 and another 111')
for i in match:
print(i.start(),i.end()
如果这不适合您,请分享您的数据样本