Python REGEX问题与重用函数重新编译+搜索

2024-09-30 20:38:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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”有效,应匹配。在


Tags: recomhttpif网站group编辑器regex
1条回答
网友
1楼 · 发布于 2024-09-30 20:38:51

Python的re.compile将前导/和尾随/g视为正则表达式的一部分,而不是分隔符和修饰符。在cd4{5>之前,你永远不会用cd4}重新编译过任何东西。在

re.compile的第一个参数应该是一个只包含的字符串,在具有/.../regex符号的语言中,您可以将这些内容放入斜杠中。g修饰符对应于对已编译的RE调用findall方法;在这种情况下,它似乎是不必要的。(其他一些修饰符,例如ism,对应于传递给re.compile的第二个参数的值。)

所以您的代码应该是这样的:

import re
test1 = 'ba116'
###Referencelink: http://academe.co.uk/2014/01/validating-flight-codes/
p = re.compile(r'^([a-z][a-z]|[a-z][0-9]|[0-9][a-z])[a-z]?[0-9]{1,4}[a-z]?$')
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'

开引号前面的r对这个正则表达式没有什么区别,但是如果您需要在RE中使用反斜杠,那么您就不必将它们全部加倍了。在

相关问题 更多 >