这是我最初的做法:
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..)我的问题:如何找到所有重叠的匹配,并得到所有的开始和结束索引以及正确?
发布于 2017-03-31 20:24:06
您所遇到的问题与这样一个事实有关:查找是一个零宽度断言,它消耗(即添加到匹配结果)没有文本。这只是字符串中的一个位置。因此,所有匹配在字符串中的相同位置开始和结束。
您需要使用http://www.regular-expressions.info/brackets.html (即(?=(11111)))和第1组的访问开始和结束(使用i.start(1)和i.end(1))来封装前瞻性模式:
import re
s = '1'*15
result = re.finditer(r'(?=(11111))', s)
for i in result:
print(i.start(1), i.end(1))参见Python演示,它的输出是
(0, 5)
(1, 6)
(2, 7)
(3, 8)
(4, 9)
(5, 10)
(6, 11)
(7, 12)
(8, 13)
(9, 14)
(10, 15)发布于 2017-03-31 20:32:35
您能否与此实现进行比较,并查看可能存在的差异。
match = re.finditer(r'111','test111 end111 and another 111')
for i in match:
print(i.start(),i.end()如果这不适用于您,请共享您的数据样本。
https://stackoverflow.com/questions/43149086
复制相似问题