【问题标题】:Re.match() returns always noneRe.match() 总是返回无
【发布时间】:2013-11-09 01:18:52
【问题描述】:

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

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'

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

【问题讨论】:

  • 尝试使用.search() 而不是.match().match() 锚定在字符串的开头。在a 中没有/ 的实例 - 为什么你的正则表达式中有/ 的实例?

标签: python regex


【解决方案1】:

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 正则表达式不需要在开头和结尾有 /

最后,我在print 行的末尾添加了.group(),因为我认为这就是您想要的。否则,你会得到类似<_sre.SRE_Match object at 0x01812220> 的东西,这没什么用处。

【讨论】:

  • 我不认为“re.match 寻找精确匹配”的情况。相反,match() 隐含地锚定在行首。但也许我只是在那里切语义..?表达式ur'.*(wekjb|ABB)',a 工作得很好。
  • @TravisGriggs - 不,没关系。最好是有技术的。我调整了我的帖子并添加了一个链接以供进一步参考。
【解决方案2】:

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

因此,如果您想要来自 match 的布尔(TrueFalse)结果,您必须检查结果是否为 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!")

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多