为了账号安全,请及时绑定邮箱和手机立即绑定

Python regex找到所有重叠匹配吗?

/ 猿问

Python regex找到所有重叠匹配吗?

Python regex找到所有重叠匹配吗?

我试图使用Python2.6中的Re找到更大系列中的每10位数字序列。

我很容易就能抓住没有重叠的比赛,但我想要每一场比赛的数字系列。例如。

在“123456789123456789”中

我应该得到以下清单:

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

我已经找到了对“展望”的引用,但是我看到的例子只显示了数字对,而不是更大的分组,而且我无法将它们转换到两位数以上。


查看完整描述

3 回答

?
青春有我

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


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]


查看完整回答
反对 回复 2019-06-12
?
波斯汪

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

>>> import regex as re

>>> s = "123456789123456789"

>>> matches = re.findall(r'\d{10}', s, overlapped=True)

>>> for match in matches: print match

...

1234567891

2345678912

3456789123

4567891234

5678912345

6789123456

7891234567

8912345678

9123456789




查看完整回答
反对 回复 2019-06-12
?
守着星空守着你

我喜欢雷克斯,但这里不需要他们。


简单


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


查看完整回答
反对 回复 2019-06-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信