Skip to main content
 首页 » 编程设计

如果任何数字出现超过一定次数,则使用 Python 正则表达式进行匹配

2024年08月15日36grandyang

我需要一个 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} 

RegEx Demo

正则表达式说明:

  • (\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