【问题标题】:Python Regular expression to match if any number appears more than a certain amount of times如果任何数字出现超过一定次数,则 Python 正则表达式匹配
【发布时间】:2018-08-19 17:59:01
【问题描述】:

我需要一个 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.*")
...

感谢您的帮助。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您可以将此正则表达式与捕获组和反向引用一起使用:

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

    【讨论】:

      猜你喜欢
      • 2021-07-09
      • 2016-03-18
      • 2010-12-12
      • 1970-01-01
      • 2022-12-11
      • 2021-01-23
      • 1970-01-01
      • 2015-09-19
      相关资源
      最近更新 更多