关于正则表达式:在python中使用正则表达式查找540-600之间的数字

Using regular expression in python to find a number between 540-600

本问题已经有最佳答案,请猛点这里访问。

我只是一个Python初学者,我正在使用regex查找540-600之间的数字

并且写了以下脚本,但这不起作用:

1
2
3
4
5
6
7
8
9
10
import re
import sys

def valid_num(num):
    print num
    p = re.match (r'^[5-6]\d\d', str(num))
    return bool(p) and all(map(lambda n: 540<= int(n)<=600, p.groups()))

a = 699
print valid_num(a)


您可以编写一个只匹配540到600之间的数字的regex,其部分如下:

1
5[4-9]\d|600

所以regex由两种可能性组成:5[4-9]\d6005[4-9]\d匹配540到599之间的任何数字,因为它以5开头,后跟4到9之间的数字和0到9之间的数字。600与600号匹配。

此外,您可能希望使用单词边界\b,以确保与56900不匹配。所以:

1
\b(?:5[4-9]\d|600)\b

或者,如果字符串只应包含数字,则应使用开始和结束锚定:

1
^(?:5[4-9]\d|600)$

这样会导致:

1
2
3
4
5
6
import re

rgx540600 = re.compile(r'^(?:5[4-9]\d|600)$')

def valid_num(num):
    return bool(rgx540600.match(str(num)))

也就是说,用regex进行这种验证通常不是一个好主意。regex通常更多地用于语法验证,而对于语义验证,其他工具通常使用得更好。


如果你真的想使用regex,我建议你:

^600|[5][4-9]\d

它将找到600,或5,后跟一个4到9的数字,再加上另一个数字。


当可以使用条件运算符时,为什么要使用regex?

1
2
def valid_num(num):
   return 540 <= num <= 600

或者,基于regex的解决方案,如果您真的想要:

1
2
def valid_num(num):
    return re.match(r'(600)|([5][4-9]\d)$', str(num)) != None