我需要一个Python正则表达式,它能够匹配任何数字出现一定次数的所有字符串(5位数字中的4次是我想要的结果这个例子)。
例如,考虑这个列表:
["11211", "23424", "22323", "99991", "88988", "11122"]
我想要一个返回的正则表达式
["11211", "99991", "88988"]
因为在这三种情况下,有一个数字在数字中出现了超过4次。
除了对 0-9 的数字进行硬编码之外,我什至不确定仅用一个正则表达式是否可以轻松实现这一点,这似乎不是一个优雅的解决方案。
这是一个正则表达式,它匹配 5 个数字字符串列表中的四个 1:
four1 = re.compile(".*1.*1.*1.*1.*")
但是有没有比这两个更优雅的解决方案,不仅可以搜索四个 1,还可以搜索四个任何类型的 1,只要它们是相同数字的四倍即可?
four1 = re.compile("(.*1.*1.*1.*1.*")|(.*2.*2.*2.*2.*")| ...
或
four1 = re.compile(".*1.*1.*1.*1.*")
four2 = re.compile(".*2.*2.*2.*2.*")
...
感谢您的帮助。
最佳答案
您可以将此正则表达式与捕获组和反向引用一起使用:
(\d)(?:\d*?\1){3}
正则表达式说明:
(\d)
:匹配单个数字并捕获第 1 组(?:
:启动非捕获组\d*?
:匹配 0 个或多个数字\1
:向后引用捕获组 #1,以确保我们匹配捕获组 #1 的重复数字
)
:结束非捕获组{3}
:匹配上述非捕获组的 3 个实例
代码:
import re
arr = ["11211", "23424", "22323", "99991", "88988", "11122"]
reg = re.compile(r'(\d)(?:\d*?\1){3}')
for s in arr:
if reg.search(s):
print s
输出:
11211
99991
88988
关于Python正则表达式匹配任何数字出现超过一定次数的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51916427/