我觉得有点愚蠢,但它不起作用:
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
。如果wekjb
或ABB
在字符串中,我想打印成功,但None
的结果总是match
。
答案 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
获得布尔值(False
或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!")