2010-12-16 101 views
3

將空字符串傳遞給正則表達式對象時,搜索的結果是匹配對象an not None。它應該是None,因爲沒有什麼可匹配的?爲什麼空的Python正則表達式的返回值搜索匹配?

import re 

m = re.search("", "some text") 
if m is None: 
    print "Returned None" 
else: 
    print "Return a match" 

順便提及,使用特殊符號^$產生相同的結果。

回答

11

空模式匹配字符串的任何部分。

檢查:

import re 

re.search("", "ffff") 
<_sre.SRE_Match object at 0xb7166410> 

re.search("", "ffff").start() 
0 

re.search("$", "ffff").start() 
4 

添加$不會產生相同的結果。比賽結束了,因爲它是唯一的地方。

0

你需要什麼做的是不檢查,如果m爲無,而要檢查是否m爲真:

if m: 
    print "Found a match" 
else: 
    print "No match" 

另外,空模式整個字符串匹配。

+0

如果m是'None',那麼'bool(m)'是'False'。他應該檢查,「m」是否爲「無」。 – gruszczy 2010-12-16 20:22:45

+0

@gruszczy不會說是否有匹配,雖然 – 2010-12-16 20:23:45

+0

In [5]:bool(re.search(「」,「ffff」)) Out [5]:True In [6]:bool re.search(「$」,「ffff」)) 輸出[6]:True – gruszczy 2010-12-16 20:25:19

1

那些正則表達式已成功匹配0個文字字符。

所有字符串可以被認爲包含空字符串的字符之間的無限數量:

'Foo' = '' + '' + ... + 'F' + '' + ... + '' + 'oo' + '' + ... 
3

看它是這樣的:您搜索的是匹配的一切,因此搜索成功,你會得到一個匹配對象。

相關問題