我在python中做了一個非常簡單的正則表達式,並且在使用「或」運算符時看到一些奇怪的行爲。Python中的正則表達式匹配
我試圖解析如下:
>> str = "blah [in brackets] stuff"
,使其返回:
>> ['blah', 'in brackets', 'stuff']
要匹配括號內的文字,我使用的外觀後面,向前看,即:
>> '(?<=\[).*?(?=\])'
如果單獨使用,確實可以捕獲括號中的文字:
>> re.findall('(?<=\[).*?(?=\])' , str)
>> ['in brackets']
但是,當我結合或運營商來解析空間之間的字符串,支架匹配某種方式分解:
>> [x for x in re.findall('(?<=\[).*?(?=\])|.*?[, ]' , str) if x!=' ' ]
>> ['blah', '[in ', 'brackets] ']
對我的生活中,我無法理解這種行爲。任何幫助,將不勝感激。
謝謝!
這可能幫助 - https://regex101.com/r/xM7sK0/1 - 左邊你可以進入調試器在那裏將說明如何它匹配了它所做的事情。 – TessellatingHeckler
謝謝,這真的很有用。 – FrancisWolcott
問題是正則表達式的後半部分也與括號相匹配。第一場比賽後(「blah」),剩餘的文字是[括號內]。正則表達式的前半部分在這裏不匹配,因爲向後看不到左括號。所以正則表達式的後半部分再次匹配並找到文本「[in」。 –