我在Python(2.7)中使用regex库're'来验证航班号。在
我在这里使用了一个非常有用的在线编辑器对预期的输出没有任何问题:http://regexr.com/
我的结果regexr.com网站是:http://imgur.com/nB0QDug
我的代码是:
import re
test1 = 'ba116'
###Referencelink: http://academe.co.uk/2014/01/validating-flight-codes/
p = re.compile('/^([a-z][a-z]|[a-z][0-9]|[0-9][a-z])[a-z]?[0-9]{1,4}[a-z]?$/g')
m = p.search(test1) # p.match() to find from start of string only
if m:
print 'It works!: ', m.group() # group(1...n) for capture groups
else:
print 'Did not work'
我不确定为什么我得到'didnotwork'输出,其中regexr显示一个匹配项(如预期)
我做了一个简单得多的正则表达式查找,结果似乎是正确的,所以我的正则表达式字符串无效,或者我正在使用复合(或者if循环)不正确?在
“ba116”有效,应匹配。在
Python的
re.compile
将前导/
和尾随/g
视为正则表达式的一部分,而不是分隔符和修饰符。在cd4{5>之前,你永远不会用cd4}重新编译过任何东西。在re.compile
的第一个参数应该是一个只包含的字符串,在具有/.../
regex符号的语言中,您可以将这些内容放入斜杠中。g
修饰符对应于对已编译的RE调用findall
方法;在这种情况下,它似乎是不必要的。(其他一些修饰符,例如i
,s
,m
,对应于传递给re.compile
的第二个参数的值。)所以您的代码应该是这样的:
开引号前面的
r
对这个正则表达式没有什么区别,但是如果您需要在RE中使用反斜杠,那么您就不必将它们全部加倍了。在相关问题 更多 >
编程相关推荐