代码之家  ›  专栏  ›  技术社区  ›  charelf

要匹配的Python正则表达式(如果任何数字出现的次数超过了一定的次数)

  •  2
  • charelf  · 技术社区  · 6 年前

    任何 数字出现一定的次数(在这个例子中,5位数字中的4次是我想要的结果)。

    例如,请考虑以下列表:

    ["11211", "23424", "22323", "99991", "88988", "11122"]
    

    ["11211", "99991", "88988"]
    

    因为在这三种情况下,有一个数字在数字中出现超过4次。

    下面是一个正则表达式,它与5个数字字符串列表中的4个1匹配:

    four1 = re.compile(".*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.*")
    ...
    

    1 回复  |  直到 6 年前
        1
  •  3
  •   anubhava    6 年前

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

    (\d)(?:\d*?\1){3}
    

    RegEx Demo

    正则表达式描述:

    • (\d)
    • (?: :启动非捕获组
      • \d*?
      • \1 :返回对捕获组1的引用,以确保匹配捕获组1的重复数字
    • ) :结束非捕获组
    • {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