2024-05-21 02:23:13 发布
网友
我要匹配所有数字值,除了以4到5位数字开头的数字 我写了一个正则表达式,它匹配从4到5位数的数字,但是我想反转这个匹配。你知道吗
c = '475555' e = (re.search(r'(\A4[0-9]{5})',c).group(0))
如何解决这个问题?你知道吗
除了负面展望之外,你还可以简单地“拼”出你想要什么:
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开头的数字,并且可以有更多的零到四个数字。你知道吗
4
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+$
除了负面展望之外,你还可以简单地“拼”出你想要什么:
这将匹配从1到9(没有4或从0开始),然后最多再匹配4个数字。你知道吗
示例:
它为您提供88887个匹配项,因为:
这个正则表达式可以:
这个想法是使用一个负的前瞻性来丢弃以
4
开头的数字,并且可以有更多的零到四个数字。你知道吗Regex Demo
Python代码:
打印
如果希望一次匹配一个数字作为整个字符串,可以使用以下正则表达式:
Regex Demo as whole input
相关问题 更多 >
编程相关推荐