【发布时间】:2011-08-02 18:36:40
【问题描述】:
我试图在 Python 2.6 中使用 re 在更大的数字系列中查找每 10 位数字系列。
我很容易抓住没有重叠的匹配,但我想要数字系列中的每一个匹配。例如。
在“123456789123456789”中
我应该得到以下列表:
[1234567891,2345678912,3456789123,4567891234,5678912345,6789123456,7891234567,8912345678,9123456789]
我发现了对“前瞻”的引用,但我看到的示例仅显示成对的数字,而不是更大的分组,而且我无法将它们转换为超过两位数。
【问题讨论】:
-
当重叠匹配从同一点开始时,所提出的解决方案将不起作用,例如,匹配 "a|ab|abc" 和 "abcd" 只会返回一个结果。是否有不涉及多次调用 match() 手动跟踪“结束”边界的解决方案?
-
@VítorDeAraújo:像
(a|ab|abc)这样的重叠正则表达式通常可以重写为具有嵌套捕获组的非重叠正则表达式,例如(a(b(c)?)?)?,我们在解包匹配项时忽略除最外层(即最左边)之外的所有捕获组;诚然,这有点痛苦,而且不太清晰。这也将是一个性能更高的正则表达式来匹配。
标签: python regex overlapping