【问题标题】:Why doesn't re.match("c", "cat") return true?为什么 re.match("c", "cat") 不返回 true?
【发布时间】:2016-07-07 06:16:00
【问题描述】:

为什么

not re.match("c", "cat")

返回 False,但是

re.match("c", "cat")

不返回 True 而是返回对象在内存中的位置。我找不到让这个陈述返回真实的方法,但我知道它是真实的,因为:

if re.match("c", "cat"):
    print "Yes!"

返回“是!”。

正如我所说,这没有实际意义,至少目前没有,但它确实让我感到困惑。

【问题讨论】:

  • 我找不到让这条语句返回 true 的方法——只需将其显式转换为 bool:bool(re.match("c", "cat"))
  • 参见docs.python.org/2/library/stdtypes.html#truth-value-testing - Python 中的所有内容都可以在布尔上下文中进行评估(使用ifnot 等)。匹配将返回一个结果(真)或None(假)。

标签: python regex python-2.7


【解决方案1】:

使用bool() 转换为布尔值(true/false):

bool(re.match("c", "cat")) == true

当您在if 语句中使用re.match("c", "cat") 时,它会自动转换为布尔值true,这就是为什么它会return Yes!

使用not 会自动将其转换为布尔值,然后将其反转,因此:

not re.match("c", "cat") == false

【讨论】:

    【解决方案2】:

    函数re.match() 如果匹配则返回match object,如果不匹配则返回None

    要从中创建一个布尔值,您可以使用:

    if re.match(...) is not None:
    

    然而,在 Python 中这并不是绝对必要的:看看例如this thread 了解更多关于 Python 的“真实”和“虚假”价值观。

    【讨论】:

      【解决方案3】:

      好吧,专注于此:

      not re.match("c", "cat")
      

      这里re.match("c", "cat") 将返回“对象在内存中的位置”,如您所说。这不是假的。

      所以现在,not re.match("c", "cat") 将导致:

      不是不假

      结果:

      错误

      当然,这种思路也可以应用于逻辑条件,比如 if 语句的条件。

      【讨论】:

      • 我被所有的否定迷惑了,乍一看是正确的。
      猜你喜欢
      • 2014-07-29
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多