2011-07-04 34 views

答えて

69

Matchオブジェクトは常に真であり、かつ一致するものがない場合Noneが返されます。真理をテストするだけです。

if re.match(...): 
+12

re.match(...)はtrueを返します。検索中に文字列内の任意の場所でパターンが確認されます。 –

+2

re.match(...)がNone: ''の代わりに '' 012 ''を使用する方が望ましいかもしれません。 – NuclearPeon

+0

申し訳ありませんが、あなたの答えのコメントに対処しましたか?私には不明ですが、あなたは明確に心配していますか? –

5

Ignacio Vazquez-Abramsが正しいです。ただし、re.match()は、Falseに評価されるNoneまたは一致オブジェクトを返します。これは常にTrueとなります。あなたの正規表現にマッチした部分についての情報が必要な場合にのみ、マッチオブジェクトの内容をチェックアウトする必要があります。

4

これを行う1つの方法は、戻り値に対してテストすることです。あなたが<_sre.SRE_Match object at ...>を得ているので、これは真であると評価されます。正規表現が一致しない場合、戻り値Noneが返され、falseと評価されます。

import re 

if re.search("c", "abcdef"): 
    print "hi" 

出力としてhiを生成します。

+0

あなたは常に*戻り値を取得します。明示的に何も返されない場合、 'None'がデフォルトです。 –

+0

ありがとうございました - それを修正しました。私はREPLで見ただけで行きました。 –

79

あなたは本当にあなたがちょうどあなたがすることなく、直接それを使用することができ、ifまたはwhileための条件としてそれを使用している場合、他の回答は、指摘したように、単にbool

>>> bool(re.search("hi", "abcdefghijkl")) 
True 
>>> bool(re.search("hi", "abcdefgijkl")) 
False 

を使用し、TrueまたはFalseが必要な場合戻り値:文字列の先頭部分が正規のパターンと一致する場合は、bool()

+0

条件文が論理演算演算を含む場合、 'bool'値が必要です。例:if(re.search( "a"、 "abc")&True): –

+1

@AizzatSuhardi、 '&'はビット演算**です。 'と'は** boolean **演算になります。ありがとう@JohnLaRooy。 –

+0

訂正: '(re.search(" a "、" abc ")、True)' –