【问题标题】:Regular Expression in conditional statement using Python 3使用 Python 3 的条件语句中的正则表达式
【发布时间】:2017-07-11 17:53:20
【问题描述】:

我正在 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语句吗?谁能给我一些解释?

【问题讨论】:

标签: python regex python-3.x


【解决方案1】:

观察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 条件评估结果的“真实性”,并将相应地执行 if 正文。

你的 if 条件可以改写一下,像这样:

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

这和if re.match(pattern, "spamspamspam")是一回事。

如果您正在学习 Python,您应该知道如何评估对象的“真实性”。所有非空数据结构都被评估为True。所有空数据结构都是False。对象是TrueNoneFalse

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

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

【讨论】:

  • 我知道 cmets 不在这里,但这是一个非常好的、写得很好且完整的答案 (+1),恭喜获得 10k! =)
  • @ViníciusAguiar 谢谢!欣赏你。
【解决方案2】:

Python 使用“Truthy”和“Falsy”值。因此,任何匹配都是真实的,而 None 是虚假的。这个概念扩展到语言中的许多地方,例如检查列表中是否有任何内容:

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

将打印错误。

查看this question了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2011-02-07
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多