我需要python的正则表达式,该表达式能够匹配任何数字出现一定次数的所有字符串(5位数字中的4次是我期望的结果)这个例子)。
例如,考虑以下列表:
["11211", "23424", "22323", "99991", "88988", "11122"]
我想要一个返回的regEx
["11211", "99991", "88988"]
因为在这三种情况下,数字中出现的数字超过4次。
除了用0到9的数字硬编码,这似乎不是一个很好的解决方案。
这是一个正则表达式,它与5个数字字符串列表中的四个1匹配:
four1 = re.compile(".*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.*")
...
谢谢您的帮助。
答案 0 :(得分:3)
您可以将此正则表达式与捕获组和反向引用一起使用:
(\d)(?:\d*?\1){3}
RegEx说明:
(\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