使用Python 3在条件语句中使用正则表达式

时间:2017-07-11 17:53:20

标签: python regex python-3.x

我正在Sololearn课程上自学Python 3。我现在正在学习正则表达式。

以下是源代码:

import re

pattern = r"spam"

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

---根据Sololearn Python 3 Tutorial Course ---

if语句中的条件令我感到困惑。对于我获得的知识,if语句中的条件应该是布尔表达式。 但是,re.match函数确定它是否匹配字符串的开头,不返回布尔值(如果匹配,则函数返回表示匹配的对象。如果不匹配,则返回None)。

因此,我不太明白上述代码的if语句?谁能给我一些解释?

2 个答案:

答案 0 :(得分: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'>

返回匹配对象。现在,如果我们改变一下模式......

In [2475]: pattern = r"ham"

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

基本上,None的真值为False,而对象的真值为Trueif条件评估&#34;真实性&#34;结果并将相应地执行if主体。

你的if条件可以重写一下,如下:

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

这个,if re.match(pattern, "spamspamspam")是同一个。

你应该知道&#34;真实性&#34;如果您正在学习python,则会评估对象的数量。所有非空数据结构都将计算为True。所有空数据结构都是False。对象为TrueNoneFalse

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

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

答案 1 :(得分:0)

Python使用&#39; Truthy&#39;和&#39; Falsy&#39;值。因此,任何匹配都是真实的,而无则是假的。这个概念扩展到语言中的许多地方,比如检查列表中是否有任何内容:

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

将打印错误。

查看this question了解详情。