检查项是否与正则表达式字符串匹配

时间:2012-05-27 00:39:09

标签: python regex list

我正在使用这个脚本:

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(不匹配)

有人可以指出我在这段代码中做错了吗?

2 个答案:

答案 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)