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

2024-04-26 02:54:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个python正则表达式,它能够匹配任何数字出现一定次数的所有字符串(在本例中,5位数字中出现4次是我想要的结果)

例如,考虑以下列表:

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

我想要一个返回的正则表达式

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

因为在这三种情况下,数字中有一个数字出现了4次以上

我甚至不确定这是否是容易做到的,只有一个正则表达式,除了硬编码的数字从0-9,这似乎不是一个优雅的解决方案

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

four1 = re.compile(".*1.*1.*1.*1.*")

但有没有比这两个更优雅的解决方案,不仅搜索4个1,而且搜索任何类型的4个,只要它们是相同数字的4倍

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.*")
...

谢谢你的帮助


Tags: 字符串re类型编码列表情况数字解决方案
1条回答
网友
1楼 · 发布于 2024-04-26 02:54:03

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

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

相关问题 更多 >

    热门问题