繁体   English   中英

Python-RE使用函数re.compile + search的REGEX问题

[英]Python - REGEX issue with RE using function re.compile + search

我在Python(2.7)中使用正则表达式库“ 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'

我不确定为什么我会在regexr显示一个匹配项的情况下得到“ did n't work”输出(按预期)

我进行了一个简单得多的正则表达式查找,结果似乎是正确的,因此看来我的正则表达式字符串无效,或者我使用re.complile(或if循环)的方式不正确吗?

“ ba116”有效,应该匹配。

Python的re.compile将前导/和尾随/g视为正则表达式的一部分,而不是定界符和修饰符。 这将产生一个将永远不会匹配任何内容的已编译RE,因为您在^之前加上了东西,在$加上了东西。

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中使用反斜杠,则可以避免将它们加倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM