我需要一个 python 的正则表达式,它能够匹配所有 any 数字出现一定次数的字符串(5 位数字中出现 4 次是我想要的结果这个例子)。
例如,考虑这个列表:
["11211", "23424", "22323", "99991", "88988", "11122"]
我想要一个返回的正则表达式
["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.*")
...
感谢您的帮助。
请您参考如下方法:
您可以将此正则表达式与捕获组和反向引用一起使用:
(\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
