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

问题描述 投票:2回答:1

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

例如,请考虑以下列表:

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

我想要一个返回的regEx

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

因为在这三种情况下,数字中出现的数字超过4倍。

我甚至不确定这只是一个单一的regEx是否可以轻松实现,除了硬编码0-9的数字,这似乎不是一个优雅的解决方案。

这是一个regEx,它匹配5个数字字符串列表中的4个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个回答
3
投票

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

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

RegEx Demo

RegEx说明:

  • (\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
© www.soinside.com 2019 - 2024. All rights reserved.