Python正则表达式返回true / false


114

使用Python正则表达式如何获得True/ False返回?所有Python回报是:

<_sre.SRE_Match object at ...>

Answers:


140

Match对象始终为true,None如果不匹配,则返回。只是测试真实性。

if re.match(...):

21
如果字符串的开头部分与常规模式匹配,则re.match(...)将返回true。虽然搜索将在字符串中的任意位置确认模式。
于神

8
它可能是更理想的使用if re.match(...) is None:,而不是
NuclearPeon

抱歉,您是否回答了您的评论?对我来说还不清楚,您想澄清一下吗?
查理·帕克

2
请问为什么 re设计成这样?如果match对象始终为真,那么True既然我们总是需要知道答案是真还是假,为什么它不首先返回?
YTU

1
@ytu:因为那样您就可以做所有其他需要做的事情
伊格纳西奥·巴斯克斯

148

如果您确实需要TrueFalse,请使用bool

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

正如其他答案所指出的那样,如果您只是将其用作ifor 的条件while,则可以直接使用它而无需将其包装bool()


1
bool当条件语句包含布尔算术运算时,需要此值。例如:if(re.search(“ a”,“ abc”)&True):
Aizzat Suhardi

2
@AizzatSuhardi,&按位操作。and将是布尔运算。
John La Rooy 2015年

1
谢谢@JohnLaRooy。更正:(re.search("a","abc") and True)
Aizzat Suhardi

这与ignacio的答案有何不同?
查理·帕克 Charlie Parker)

2
包装bool使读者可以清楚地了解程序员的意图。
GuilhermeSalomé18年

10

伊格纳西奥·巴斯克斯(Ignacio Vazquez-Abrams)是正确的。但要详细说明,re.match()将返回None,其结果为False,或者返回一个匹配对象,该对象将始终True如他所说。仅当您需要有关与正则表达式匹配的部分的信息时,才需要签出匹配对象的内容。


6

一种方法是仅针对返回值进行测试。因为您得到<_sre.SRE_Match object at ...>它意味着它将评估为true。当正则表达式不匹配时,您将返回无值,其结果为false。

import re

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

产生hi为输出。


总是会得到一个返回值;None如果未明确返回任何内容,则为默认值。
伊格纳西奥·巴斯克斯

谢谢-纠正了。我只是按照我在REPL中所看到的走。
加文·安德雷格

4

这是我的方法:

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

1
p = re.comp il e(r'hi'):-P
Clay Clay

是的,它返回“ False”
Ufos

如果更改matchsearch,则返回True
alofgran

1

您可以使用re.match()re.search()。Python提供了两种基于正则表达式的原始操作:re.match()仅在字符串的开头re.search()检查匹配项,而在字符串中的任意位置检查匹配项(这是Perl的默认设置)。参考这个

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.