用于不匹配从4到5位数字开始的数值的正则表达式

2024-05-21 02:23:13 发布

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

我要匹配所有数字值,除了以4到5位数字开头的数字 我写了一个正则表达式,它匹配从4到5位数的数字,但是我想反转这个匹配。你知道吗

c = '475555'
e = (re.search(r'(\A4[0-9]{5})',c).group(0))

如何解决这个问题?你知道吗


Tags: researchgroup数字a4位数
2条回答

除了负面展望之外,你还可以简单地“拼”出你想要什么:

r'[12356789]\d{0,4}'

这将匹配从1到9(没有4或从0开始),然后最多再匹配4个数字。你知道吗

示例:

import re

i = 0
for k in range(1,99999):
    if re.match(r'[12356789]\d{0,4}',str(k)):
        # print(k)
        i += 1

print(i) # 88887

它为您提供88887个匹配项,因为:

range(1,99999)   (max excluded)   = 99998 values
4                                 =     1 value
40,41,42, ..., 49                 =    10 values
400,401,402, ..., 499             =   100 values
4000,4001,4002, ..., 4999         =  1000 values
40000,40001,40002, ..., 49999     = 10000 values

99998 - 1 - 10 - 100 - 1000 - 10000 = 88887

这个正则表达式可以:

\b(?!4\d{0,4}\b)\d+\b

这个想法是使用一个负的前瞻性来丢弃以4开头的数字,并且可以有更多的零到四个数字。你知道吗

Regex Demo

Python代码:

import re

s = '475555 4 41 412 4123 4123 412345'

print(re.findall(r'\b(?!4\d{0,4}\b)\d+\b', s))

打印

['475555', '412345']

如果希望一次匹配一个数字作为整个字符串,可以使用以下正则表达式:

^(?!4\d{0,4}$)\d+$

Regex Demo as whole input

相关问题 更多 >