2017-07-11 7 views
1

私はSololearnコースでPython 3を自習しています。私は今、正規表現を学んでいます。Python 3を使用した条件文の正規表現

--- SololearnのPython 3チュートリアルのコースに応じ---文はかなり私を混乱させている場合における条件

import re 

pattern = r"spam" 

if re.match(pattern, "spamspamspam"): 
    print("Match") 
else: 
    print("No match") 

:ここ

は、ソースコードです。私の知る限り、if文の条件はブール式でなければなりません。 しかし、re.match関数は、文字列の先頭に一致するかどうかを判定し、ブール値を返しません(一致する場合は一致を表すオブジェクトを返します。一致しない場合はNoneを返します)。

したがって、私は上記のコードのif文をよく理解していませんか?誰か私に説明を教えてもらえますか?

+1

ここで真実の評価を見ることができます。https://docs.python.org/2/library/stdtypes.html#truth-value-testing – Dalvenjia

答えて

4

re.matchの出力を観察:

In [2473]: pattern = r"spam" 

In [2474]: re.match(pattern, "spamspamspam") 
Out[2474]: <_sre.SRE_Match object; span=(0, 4), match='spam'> 

これはマッチオブジェクトを返します。オブジェクトのそれはTrueありながら今、私たちは私たちのパターンビットを変更した場合...

In [2475]: pattern = r"ham" 

In [2477]: print(re.match(pattern, "spamspamspam")) 
None 

基本的には、Noneの真理値は、Falseです。 if条件は結果の真実性を評価し、それに応じてif本体を実行します。

あなたの条件は次のように、ビットを書き換えることができる場合:

if re.match(pattern, "spamspamspam") is not None: 
    .... 

これ、とif re.match(pattern, "spamspamspam")は1と同じです。

あなたがPythonを学んでいるなら、オブジェクトの "真実性"が評価される方法について知っておくべきです。空でないデータ構造はすべてTrueと評価されます。すべての空のデータ構造はFalseです。オブジェクトはTrueNoneFalseです。

In [2482]: if {}: 
     ...:  print('foo') 
     ...: else: 
     ...:  print('bar') 
     ...:  
bar 

In [2483]: if ['a']: 
     ...:  print('foo') 
     ...: else: 
     ...:  print('bar') 
     ...:  
foo 
+0

コメントはここにはありませんが、これは本当に良い、よく書かれ、完全な答え(+1)、おめでとう! =) –

+0

@ViníciusAguiarありがとう!ありがとう。 –

0

Pythonは 'Truthy'と 'Falsy'の値を使用します。したがって、どんなマッチも真実で、誰も虚偽ではありません。この概念は、リスト内に何かが存在するかどうかをチェックするなど、言語の多くの場所に拡張されます。

if []: 
    print("True") 
else: 
    print("False") 

falseを出力します。

詳細については、this questionをご覧ください。

関連する問題