17

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

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'如果给定的用户a是 unicode。wekjb如果或ABB在字符串中,我想打印成功,但我总是None得到match.

4

2 回答 2

53

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

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

于 2013-11-09T01:25:34.397 回答
0

这是因为如果找不到预期的模式,该match方法会返回,如果找到模式,它将返回一个类型为.None_sre.SRE_match

所以,如果你想得到布尔(TrueFalse)结果,match你必须检查结果是否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!")
于 2019-11-30T20:42:27.310 回答