2017-08-28 112 views
0

我有這樣的開始,這給不匹配,爲什麼?的Python編寫模式匹配與標誌,cp.search匹配的行

>>> p = r'abc' 
>>> cp = re.compile(p, re.IGNORECASE) 
>>> m = cp.search('ABC', re.IGNORECASE) 
>>> m # NO MATCH # 1 

但是,這給出了一個比賽,爲什麼?

>>> m = cp.search(' ABC', re.IGNORECASE) # introduced spaces, ABC no longer at the beginning 
>>> m # MATCH # 2 
<_sre.SRE_Match object at 0x1082b5ac0> 

爲了在#1中獲得一個匹配,我所要做的就是drop re.IGNORECASE,爲什麼這樣呢?

>>> m = cp.search('ABC') 
>>> m 
<_sre.SRE_Match object at 0x10827e308> 

回答

1

如果(在解釋器),你打印出來幫助上cp.search:

help(cp.search) 

您將看到:

Help on built-in function search: 
search(string=None, pos=0, endpos=9223372036854775807, *, pattern=None) method of _sre.SRE_Pattern instance 
    Scan through string looking for a match, and return a corresponding match object instance. 

    Return None if no position in the string matches. 

注意,此函數不帶任何標誌,但是你實際上將你的國旗傳遞給'pos'的論點,這就是你得到意想不到的結果的原因。

+0

你在方法幫助中如何獲得'pos = 0,endpos = 9223372036854775807'?我沒有看到。但是你所說的總是有道理的。謝謝 – abc

+0

@abc不知道,也許我們正在運行不同版本的Python。 –

+0

'$ python --version Python 2.7.10' – abc