python 3正则表达式 - 找到所有重叠的匹配'字符串

时间:2017-03-31 20:21:46

标签: python regex

这是我最初的做法:

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

我的问题: 如何找到所有重叠匹配,并将所有开始和结束索引都正确?

2 个答案:

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

如果这不适合您,请分享您的数据样本