正则表达式问题:如何检查列表中的任何值是否匹配?

时间:2011-05-30 13:55:31

标签: python regex

如果字符串至少包含列表中的一个元素,我想创建一个匹配的RE对象。

例如,如果bad_words["censored","stupid","idiot"]是列表,那么如果至少存在其中一个,RE将匹配。

这是我的RE:re.compile("(%s)+" % ("|".join(bad_words)), re.IGNORECASE)

问题是'youareanidiot'不匹配。为了使其匹配,我需要更改什么?

2 个答案:

答案 0 :(得分:11)

虽然可以用正则表达式做到这一点,但我认为如果没有正则表达式,你会更好。要针对s测试字符串bad_words,请尝试类似

的内容
s = s.lower()
any(bad in s for bad in bad_words)

您的bad_words应该都是小写。

答案 1 :(得分:4)

您使用的是re.match吗?尝试re.search。请参阅Python正则表达式文档中的Matching vs. Searching

import re
bad_words = ["stupid", "idiot"]
regex = re.compile("|".join(re.escape(word) for word in bad_words), re.IGNORECASE)
print regex.search('youareanidiot').group()

# prints "idiot"