我正在使用这个脚本:
import re
message = 'oh, hey there'
matches = ['hi', 'hey', 'hello']
def process(message):
for item in matches:
search = re.match(item, message)
if search == None:
return False
return True
print process(message)
基本上,我的目的是检查message
的任何部分是否在matches
中的任何项目内,但是使用此脚本,它始终返回False
(不匹配)
有人可以指出我在这段代码中做错了吗?
答案 0 :(得分:3)
使用search
而不是match
。作为优化,match
only starts looking at the beginning of the string, rather than anywhere in it。
此外,您只查看上次比赛尝试的结果。您应该检查循环内部并在任何匹配时提前返回:
for item in matches:
if re.search(item, message):
return True
return False
请注意,如果您只关心子字符串并且不需要匹配正则表达式,请使用the in
operator:
for item in matches:
if item in message:
return True
return False
答案 1 :(得分:2)
正如icktoofay的回答所示,如果你想搜索字符串中的任何地方,你应该使用re.search()
而不是re.match()
,但是对于这个简单的东西你可以使用正常的子字符串测试:
message = 'oh, hey there'
matches = ['hi', 'hey', 'hello']
def process(message):
return any(item in message for item in matches)
print process(message)