2017-04-03 147 views
0

我的問題是,這個簡單的正則表達式語句與布爾運算符只給了我想要的結果,當位運算符左側的第一項|出現在句子中。有人能告訴我爲什麼它不能在替代方案上工作嗎?蟒蛇正則表達式布爾語句不工作

import re 

b = 'this is a good day to die hard' 

jeff = re.search('good night (.+)hard|good day (.+)hard', b) 

print jeff.group(1) 
+0

因爲第二個'(...)'創建第二個組。 –

+0

'|'的正確名稱在正則表達式中是「交替」。這不是真的布爾。 – kindall

回答

0

第二(...)創建你需要.group(2)訪問第二個捕獲組。

你可以編寫一個正則表達式來捕獲daynight,而第二組將獲取所有到最後hard

import re 
b = 'this is a good day to die hard' 
jeff = re.search('good (day|night) (.+)', b) 
if jeff: 
    print jeff.group(1) 
    print jeff.group(2) 

demo的輸出:

day 
to die hard 
1

你有兩套捕獲括號的 - 因此,你有兩個編號的捕獲組。如果第二個分支匹配,group(1)將被設置爲None,並且group(2)將包含與第二個分組相匹配的分支。


有幾種方法可以解決這個問題。一個會寫,以便只有一個組,例如

jeff = re.search('good (?:day|night) (.+)hard', b)