首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3regex-在字符串中查找所有重叠匹配的开始和结束索引

Python3regex-在字符串中查找所有重叠匹配的开始和结束索引
EN

Stack Overflow用户
提问于 2017-03-31 20:21:45
回答 2查看 3.7K关注 0票数 5

这是我最初的做法:

代码语言:javascript
复制
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())

它找到所有的重叠匹配,但没有得到正确的结束索引。产出:

代码语言:javascript
复制
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..)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-31 20:24:06

您所遇到的问题与这样一个事实有关:查找是一个零宽度断言,它消耗(即添加到匹配结果)没有文本。这只是字符串中的一个位置。因此,所有匹配在字符串中的相同位置开始和结束。

您需要使用http://www.regular-expressions.info/brackets.html (即(?=(11111)))和第1组的访问开始和结束(使用i.start(1)i.end(1))来封装前瞻性模式:

代码语言:javascript
复制
import re
s = '1'*15     
result = re.finditer(r'(?=(11111))', s)

for i in result:
    print(i.start(1), i.end(1))

参见Python演示,它的输出是

代码语言:javascript
复制
(0, 5)
(1, 6)
(2, 7)
(3, 8)
(4, 9)
(5, 10)
(6, 11)
(7, 12)
(8, 13)
(9, 14)
(10, 15)
票数 10
EN

Stack Overflow用户

发布于 2017-03-31 20:32:35

您能否与此实现进行比较,并查看可能存在的差异。

代码语言:javascript
复制
match = re.finditer(r'111','test111 end111 and another 111')
for i in match:
    print(i.start(),i.end()

如果这不适用于您,请共享您的数据样本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43149086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档