Python正则表达式搜索始终如此?

时间:2012-06-30 23:14:41

标签: python regex

我很确定我在这里缺少一些非常基本的东西,因为我通常可以使用Python&正则表达式。我想看看提供的字符串是否包含至少一个数字,这是我正在经历的命令行,但总是变错...

>>> import re
>>> test_string = "123567890"
>>> pat = re.compile("[0-9]")
>>> pat.search(test_string) == True
False

在发布这篇文章之前,我尝试过其他几种排列而不是走得太远,我做错了什么?

4 个答案:

答案 0 :(得分:4)

pat.search不返回布尔值,而是返回MatchObject,因此您的比较将失败:

In [9]: p = pat.search(test_string)

In [10]: p
Out[10]: <_sre.SRE_Match at 0x3cfa608>

In [11]: type(p)
Out[11]: _sre.SRE_Match

请参阅re.search文档:

  

re.search(pattern,string,flags = 0)

     

扫描字符串,查找常规位置   表达式模式产生匹配,并返回相应的   MatchObject实例。如果字符串中没有位置匹配则返回None   模式;请注意,这与查找零长度不同   匹配字符串中的某个点。

答案 1 :(得分:0)

问题是re.search()方法实际上并不返回bool,而是返回专门的regexp. match objectbool(pat.search(test_string))应该返回True,即:

>>> import re
>>> test_string = "123567890"
>>> pat = re.compile("[0-9]")
>>> bool(pat.search(test_string))
True

检查成功匹配的正常方法是使用if结构,即:

>>> if pat.search(test_string): True
... 
True

您可以对实现__nonzero____len__特殊方法之一的任何对象使用此缩写形式的真值测试。

答案 2 :(得分:0)

re.search在找到匹配项时返回MatchObject,而不是布尔值。当它不匹配时它会返回None,所以这会做你想要做的事情:

pat.search(test_string)!=None

答案 3 :(得分:0)

以下是使用匹配对象的方法。我通常需要一个来自匹配对象的True / False,所以我总是把它保存起来。

>>> m = pat.search(test_string)
>>> bool(m) == True
True
>>> if m:
        print "true"
true