[英]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
方法; 在這種情況下,這似乎是不必要的。 (其他一些修飾符,例如i
, s
, m
,對應於傳遞給第二個參數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.