python 3 regex - 在字符串中查找所有重叠匹配项的开始和结束索引

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

我的问题: 我怎样才能找到所有重叠的匹配项,并获得正确的所有开始和结束索引?

最佳答案

您遇到的问题与前瞻是 zero-width assertion 的事实有关。消耗(即添加到匹配结果)没有文本。它只是字符串中的一个位置。因此,您的所有匹配项都在字符串中的相同位置开始和结束。

您需要使用 capturing group 将前瞻模式括起来(即 (?=(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 demo ,它的输出是

(0, 5)
(1, 6)
(2, 7)
(3, 8)
(4, 9)
(5, 10)
(6, 11)
(7, 12)
(8, 13)
(9, 14)
(10, 15)

关于python 3 regex - 在字符串中查找所有重叠匹配项的开始和结束索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43149086/

相关文章:

Python 展望 : Read Inbox of additional mailbox

python - 匹配第一个字母数字字符跳过(|An?)

python re.findall 与 re.sub

python - 如何下载 aiotp 的早期版本?

python - 附加数据帧列的模式仅在数据帧的第一行中创建值

python - 哪些脚本不应从 bash 移植到 python?

regex - 使用awk和regex搜索两行之间的文本

python - 为什么 shell=True 和 shell=False 做同样的事情?

正则表达式来验证数字提交 -

java - 使用 REGEX 验证坐标格式是否正确