2014-11-13 22 views
0

我想針對多行字符串匹配正則表達式,但匹配失敗後的第一行。針對多行字符串匹配正則表達式

這些表達式按預期工作:

>>> import re 
>>> r = re.compile("a") 
>>> a = "a" 
>>> r.match(a) 
<_sre.SRE_Match object; span=(0, 1), match='a'> 
>>> a = "a\n" 
>>> r.match(a) 
<_sre.SRE_Match object; span=(0, 1), match='a'> 
>>> 

雖然這種表達不工作:

>>> a = "\na" 
>>> r.match(a) 
>>> 

回答

3

re.match旨在從字符串的第一個字符(開始)相匹配。在前兩個例子中,匹配正常工作,因爲a是第一個字符。然而在最後一個例子中,比賽失敗,因爲\n是第一個字符。

您需要使用re.search在這種情況下,有對a Python的搜索:

>>> import re 
>>> r = re.compile("a") 
>>> a = "\na" 
>>> r.search(a) 
<_sre.SRE_Match object; span=(1, 2), match='a'> 
>>> 

另外,剛一說明:如果您正在使用多行字符串的工作,那麼你將需要設置dot-all標誌有.匹配換行符。這可以通過re.DOTALL完成。

2

爲什麼犯規match工作?

match在字符串的開頭搜索模式。

如何更正?

使用search代替

>>> import re 
>>> pat=re.compile('a') 
>>> pat.search('\na') 
<_sre.SRE_Match object at 0x7faef636d440> 
>>>