Python正则表达式返回True/False。

181

如何使用Python正则表达式获取True/False返回值?Python只会返回以下内容:

<_sre.SRE_Match object at ...>

1
尝试使用 bool(re.search(pattern=META_VAR_REGEX, string=coq_str)) - Charlie Parker
6个回答

250

如果你确实需要 True 或者 False ,那么只需要使用 bool 即可。

>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False

正如其他答案所指出的,如果你只是将其作为 ifwhile 的条件,你可以直接使用它而不需要包裹在 bool() 中。


2
当条件语句包含布尔算术运算时,需要使用 bool 值。例如:if (re.search("a","abc") & True)。 - Aizzat Suhardi
5
@AizzatSuhardi,& 是位运算符。and 则是布尔运算符。 - John La Rooy
3
感谢 @JohnLaRooy。更正:(re.search("a","abc") and True)。 该代码段将返回True,因为re.search("a","abc")匹配到了字符串"abc"中的字母"a",且True始终为True,所以整个条件表达式为True。 - Aizzat Suhardi
这与Ignacio的答案有何不同? - Charlie Parker
7
将值包装在 bool 中可以让程序员的意图更加清晰地传达给读者。 - Guilherme Salomé
1
这不仅更清晰,有些情况下还是必需的,例如如果您正在使用Python单元测试中的assertTrue函数来检查正则表达式匹配(您需要布尔值而非表达式)。或者任何需要布尔输入的函数... - DannyMoshe

180

Match 对象始终为 true(真),如果没有匹配,则返回 None。只需测试真假即可。

if re.match(...):

30
如果字符串的开头部分与正则模式匹配,re.match(...)将返回true。而搜索将在字符串中的任何位置确认该模式。 - Yu Shen
10
最好使用“if re.match(...) is None:”而不是其他方式。 - NuclearPeon
2
抱歉,你在回答中解决了评论吗?对我来说不太清楚,你介意澄清一下吗? - Charlie Parker
2
我能问一下为什么 re 被设计成这样吗?如果match对象总是真的,那为什么它不直接在第一次返回 True 呢?毕竟我们最终需要知道答案是真还是假。 - ytu
2
@ytu:因为这样你就可以做你需要的其他所有事情 - Ignacio Vazquez-Abrams
显示剩余3条评论

15

这是我的方法:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = re.compile(r'hi') :-P - Clay
是的,它返回“False”。 - Ufos
如果你将“match”改为“search”,它会返回True。 - alofgran

12

Ignacio Vazquez-Abrams 是正确的。 但是为了阐述,re.match()会返回None,它会被评估为False,或者一个匹配对象,它将始终如他所说的那样评估为True。 只有当您想要有关与正则表达式匹配的部分的信息时,您才需要查看匹配对象的内容。


9

一种方法是只测试返回值。因为你得到的是 <_sre.SRE_Match object at ...>,这意味着它将计算为真。当正则表达式没有匹配时,你会得到返回值 None,它计算为假。

import re

if re.search("c", "abcdef"):
    print "hi"

产生hi作为输出。

总是会得到一个返回值;如果没有明确返回任何内容,则默认为None - Ignacio Vazquez-Abrams
谢谢 - 我已经纠正了。我只是根据REPL中看到的内容来做的。 - Gavin Anderegg

4

你可以使用 re.match() 或者 re.search()

基于正则表达式,Python 提供了两种不同的原始操作:re.match() 仅在字符串开头处检查匹配,而 re.search() 则在字符串的任何位置检查匹配(这是 Perl 默认的行为)。详情请参见此文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接