Re.match()总是返回none

时间:2013-11-09 01:18:52

标签: python regex

我觉得有点愚蠢,但它不起作用:

import re

a = " ebrj wjrbw erjwek wekjb rjERJK ABB RAEJKE BWE RWEJBEWJ B KREWBJ BWERBJ32J3B23B J BJ235JK BJJ523 2"

print re.match(ur'/(wekjb|ABB)/',a)
if re.match(ur'/(wekjb|ABB)/',a):
    print 'success'

如果给定ur'的用户是unicode,我有a。如果wekjbABB在字符串中,我想打印成功,但None的结果总是match

2 个答案:

答案 0 :(得分:17)

re.match隐含地锚定在字符串的开头。如果您想在字符串中搜索可以在其中的任何位置的子字符串,那么您需要使用re.search

import re

a = " ebrj wjrbw erjwek wekjb rjERJK ABB RAEJKE BWE RWEJBEWJ B KREWBJ BWERBJ32J3B23B J BJ235JK BJJ523 2"

print re.search(ur'(wekjb|ABB)',a).group()
if re.search(ur'(wekjb|ABB)',a):
    print 'success'

输出:

wekjb
success

此外,Python Regexes不需要在开头和结尾都有/

最后,我将.group()添加到print行的末尾,因为我觉得这就是你想要的。否则,你会得到像<_sre.SRE_Match object at 0x01812220>这样的东西,这不太有用。

答案 1 :(得分:0)

这是因为,match方法无法找到预期的模式就返回None,如果找到期望的模式,它将返回类型为_sre.SRE_match的对象。

因此,如果要从True获得布尔值(Falsematch),则必须检查结果是否为None

您可以像这样检查文本是否匹配:

string_to_evaluate = "Your text that needs to be examined"
expected_pattern = "pattern"

if re.match(expected_pattern, string_to_evaluate) is not None:
    print("The text is as you expected!")
else:
    print("The text is not as you expected!")