python正则表达式是否找到所有重叠的匹配项?

nfg76nw0  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(309)

我试图使用python2.6中的re在一个更大的数字序列中找到每一个10位数的数字序列。
我很容易抓到没有重叠的比赛,但我想在数字系列的每一场比赛。如。
在“123456789123456789”中
我应该得到以下列表:

[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]

我找到了“lookahead”的引用,但我看到的示例只显示成对的数字,而不是较大的分组,而且我无法将它们转换为两位数以外的数字。

yacmzcpb

yacmzcpb1#

在前瞻中使用捕获组。lookahead捕获您感兴趣的文本,但实际匹配在技术上是lookahead之前的零宽度子字符串,因此匹配在技术上是不重叠的:

import re 
s = "123456789123456789"
matches = re.finditer(r'(?=(\d{10}))',s)
results = [int(match.group(1)) for match in matches]

# results:

# [1234567891,

# 2345678912,

# 3456789123,

# 4567891234,

# 5678912345,

# 6789123456,

# 7891234567,

# 8912345678,

# 9123456789]
r7s23pms

r7s23pms2#

您也可以尝试使用第三方 regex 模块(非 re ),它支持重叠匹配。

>>> import regex as re
>>> s = "123456789123456789"
>>> matches = re.findall(r'\d{10}', s, overlapped=True)
>>> for match in matches: print(match)  # print match
...
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789
rta7y2nd

rta7y2nd3#

我喜欢正则表达式,但这里不需要。
简单地

s =  "123456789123456789"

n = 10
li = [ s[i:i+n] for i in xrange(len(s)-n+1) ]
print '\n'.join(li)

结果

1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789

相关问题