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由两种可能性组成:
此外,您可能希望使用单词边界
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的数字,再加上另一个数字。
当可以使用条件运算符时,为什么要使用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 |