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

Python 用于不匹配从4到5位数字开始的数值的正则表达式,python,regex,Python,Regex,我想匹配除以4到5位数字开头的数字以外的所有数值 我写了一个正则表达式,它匹配从4到5位的数字,但我想反转这个匹配 c = '475555' e = (re.search(r'(\A4[0-9]{5})',c).group(0)) 如何解决此问题?此正则表达式将执行以下操作: \b(?!4\d{0,4}\b)\d+\b 其思想是使用负前瞻来丢弃以4开头的数字,这些数字可以有更多的零到四位数 Python代码: 印刷品 如果希望一次匹配一个数字作为整个字符串,可以使用以下正则表达式: ^(?

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

c = '475555'
e = (re.search(r'(\A4[0-9]{5})',c).group(0))
如何解决此问题?

此正则表达式将执行以下操作:

\b(?!4\d{0,4}\b)\d+\b
其思想是使用负前瞻来丢弃以
4
开头的数字,这些数字可以有更多的零到四位数

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

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

除了负面展望之外,您还可以简单地“拼写”出您想要的:

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

所以你想把这个正则表达式不匹配的所有东西都作为一个字符串?在给定的情况下,不建议使用空字符串?在限制量词中忽略下限值,最佳做法是始终使用它,即使它是0。
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
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