簡體   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