Python 用于不匹配从4到5位数字开始的数值的正则表达式
我想匹配除以4到5位数字开头的数字以外的所有数值 我写了一个正则表达式,它匹配从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代码: 印刷品 如果希望一次匹配一个数字作为整个字符串,可以使用以下正则表达式: ^(?
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