如何使用正则表达式查找所有重叠匹配
- 2024-11-21 08:33:00
- admin 原创
- 35
问题描述:
我正在尝试使用 Python 2.6 中的 re 在更大的数字系列中查找每个 10 位数字系列。
我可以轻松抓取不重叠的匹配项,但我想要数字系列中的每个匹配项。例如。
在“123456789123456789”中
我应该得到以下列表:
[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]
我找到了对“前瞻”的引用,但我所看到的例子只显示数字对,而不是更大的分组,而且我无法将它们转换为两位数以外的数字。
解决方案 1:
在前瞻中使用捕获组。前瞻会捕获您感兴趣的文本,但实际匹配从技术上讲是前瞻之前的零宽度子字符串,因此匹配从技术上讲是不重叠的:
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]
解决方案 2:
您还可以尝试使用支持重叠匹配的第三方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
解决方案 3:
我喜欢正则表达式,但这里不需要它们。
简单地
s = "123456789123456789"
n = 10
li = [ s[i:i+n] for i in xrange(len(s)-n+1) ]
print '
'.join(li)
结果
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789
解决方案 4:
借助已接受的答案,以下内容目前也有效
import re
s = "123456789123456789"
matches = re.findall(r'(?=(d{10}))',s)
results = [int(match) for match in matches]
解决方案 5:
您可以尝试 REmatch 库,这是第一个捕获所有匹配项的正则表达式库。其Python 版本可按如下方式使用:
import pyrematch as REmatch
s = "123456789123456789"
query = REmatch.reql("!tendigits{d{10}}")
matches = query.findall(s)
for match in matches:
print(match.group("tendigits"))
结果:
1234567891
2345678912
3456789123
4567891234
5678912345
6789123456
7891234567
8912345678
9123456789
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD