Python正则表达式匹配任何数字出现超过一定次数的情况

标签 python regex

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

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

关于Python正则表达式匹配任何数字出现超过一定次数的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51916427/

相关文章:

python - 使用 Python 的文本阴影

python - 上传后自动将 WAV 音频文件转换为服务器上的 MP3?

python - 如何在 matplotlib 的折线图上绘制最大值点?

python - 检查两个 csv 文件的两列值,如果找到匹配,则写入另一个 csv 文件

jquery - 如何通过在 Twig 中搜索正则表达式来替换字符串?

正则表达式:用制表符替换 4 个空格组(从换行符到一个字符)

C# 如何从字符串中获取单词

python - Numpy:计算大数组的协方差

r - 带特殊字符的grep

ruby-on-rails - 将数字添加到正则表达式?