0

我正在使用这个脚本:

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

有人可以指出我在这段代码中是否做错了什么?

4

2 回答 2

3

使用search而不是match. 作为一种优化,match只开始查看字符串的开头,而不是其中的任何位置

此外,您只查看最后一次匹配尝试的结果。您应该检查循环内部并在任何匹配时尽早返回:

for item in matches:
    if re.search(item, message):
        return True
return False

请注意,如果您只关心子字符串并且不需要匹配正则表达式,只需使用运算in

for item in matches:
    if item in message:
        return True
return False
于 2012-05-27T00:40:46.073 回答
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)
于 2012-05-27T00:44:23.463 回答