回答:
Matchオブジェクトは常に真でありNone、一致しない場合に返されます。真実をテストするだけです。
if re.match(...):
if re.match(...) is None:代わりに使用する方が望ましい場合があります
reこのように設計されていますか?場合はmatch、オブジェクトは常に真である、なぜそれだけで戻りませんTrue、我々は常に答えが真か偽とにかくであるかを知っておく必要があることを考えると、最初の場所で?
Trueまたはが本当に必要な場合はFalse、bool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
他の回答が指摘しているように、単にiforの条件として使用している場合は、whileラップせずに直接使用できますbool()
bool条件ステートメントにブール算術演算が含まれている場合、値が必要です。例:if(re.search( "a"、 "abc")&True):
&はビット単位の演算です。andだろうブーリアン演算。
(re.search("a","abc") and True)
boolすると、プログラマーの意図が読者に明確になります。
これを行う1つの方法は、戻り値に対してテストすることです。取得して<_sre.SRE_Match object at ...>いるため、これはtrueと評価されます。正規表現が一致しない場合、戻り値Noneが返され、評価はfalseになります。
import re
if re.search("c", "abcdef"):
print "hi"
生成しhi出力として。
None明示的に何も返されない場合のデフォルトです。
re.match()またはを使用できますre.search()。Pythonは、正規表現に基づいて2つの異なるプリミティブ操作を提供します。re.match()文字列の先頭でのみ一致をre.search()チェックし、文字列の任意の場所で一致をチェックします(これはPerlがデフォルトで行うことです)。これを参照