2010-12-16 10 views
3

空の文字列を正規表現オブジェクトに渡すと、検索結果は一致オブジェクトとなります。一致するものはないので、それはNoneですか?空のpython regexpの戻り値が一致するのはなぜですか?

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 

同じ結果が得られていない$を追加します。マッチは終わりである、それはそれができる唯一の場所なので。 mはむしろどれも、あなたはmが真であるかどうかを確認したいされていない場合は、あなたがやってする必要がどのような

0

がチェックされていません。

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

はまた、空のパターンは、全体の文字列にマッチします。

+0

mが 'None'の場合、' bool(m) 'は' False'です。彼は、「m」が「なし」であるかどうかを調べるべきです。マッチがあるかどう[5]では – gruszczy

+0

@gruszczy:BOOL(re.search( ""、 "FFFF")) アウト[5]:[6]では真 :BOOL( re.search( "$"、 "ffff")) Out [6]:True –

+0

けれども、言っていない – gruszczy

1

これらの正規表現は、0リテラル文字と正常に一致しています。

すべての文字列は、文字と文字の間に空の文字列の無限の数を含むと考えることができます。それに

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

ルック、このように:あなたが検索すべてがマッチした、したがって、検索が成功したとあなたが得ますマッチオブジェクト

関連する問題