2017-10-10 26 views
0

我試圖解析在與正則表達式多行輸出,解析多線輸出與正則表達式

>>> a = """ 
... Feature 101 
... Learning: Yes 
... -------------- 
... Feature 102 
... Learning: No 
... """ 

我得到的是隻有一個值,它不應該同時返回的值,因爲我已經使用re.MULTILINE|re.DOTALL

>>> import re 
>>> re.findall('.*Feature\s*(\d+).*Learning\s*:\s*(\w+).*', a, re.MULTILINE|re.DOTALL) 
[('102', 'No')] 

感謝幫助!

+2

在'。*'周圍加上括號,看看它匹配的是什麼。 – Ryan

+2

閱讀有關貪婪和非貪婪限定詞 –

回答

2

問題是貪婪.*(在正則表達式中全部3個)。 如果你讓他們都非貪婪通過附加?(其更改爲.*?), 你會得到你所期望的結果:

>>> re.findall(r'.*?Feature\s*(\d+).*?Learning\s*:\s*(\w+).*?', a, re.MULTILINE|re.DOTALL) 
[('101', 'Yes'), ('102', 'No')] 

此外,這是一件好事,使用原始字符串與r'...'爲常用表達。