dan*_*nts 77 python regex overlapping
我试图在Python 2.6中使用re在一系列更大的数字中找到每10个数字系列的数字.
我很容易就能抓住没有重叠的比赛,但我想要数字系列中的每场比赛.例如.
在"123456789123456789"
我应该得到以下列表:
[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]
Run Code Online (Sandbox Code Playgroud)
我发现了对"前瞻"的引用,但我看过的例子只显示了数字对而不是更大的分组,我无法将它们转换为超出两位数.
ber*_*nie 143
在前瞻中使用捕获组.前瞻捕获您感兴趣的文本,但实际匹配在技术上是前瞻之前的零宽度子字符串,因此匹配在技术上不重叠:
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]
Run Code Online (Sandbox Code Playgroud)
Dav*_*d C 70
您也可以尝试使用支持重叠匹配的第三方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
Run Code Online (Sandbox Code Playgroud)
eyq*_*uem 18
我喜欢正则表达式,但这里不需要它们.
只是
s = "123456789123456789"
n = 10
li = [ s[i:i+n] for i in xrange(len(s)-n+1) ]
print '\n'.join(li)
Run Code Online (Sandbox Code Playgroud)
结果
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789
Run Code Online (Sandbox Code Playgroud)
借助已接受的答案,以下内容目前也有效
import re
s = "123456789123456789"
matches = re.findall(r'(?=(\d{10}))',s)
results = [int(match) for match in matches]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51756 次 |
| 最近记录: |