Я хочу создать объект RE, который соответствует, если строка содержит хотя бы один из элементов списка.
Например, если bad_words["censored","stupid","idiot"]
- это список, RE будет соответствовать, если хотя бы один из них существует.
Это мой RE: re.compile("(%s)+" % ("|".join(bad_words)), re.IGNORECASE)
Проблема в том, что "youareanidiot" не соответствует. Что мне нужно изменить, чтобы он соответствовал?
Вы используете re.match? Попробуйте re.search. См. Соответствие и поиск из документов регулярного выражения Python.
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"
Хотя это можно сделать с регулярным выражением, я думаю, что вам лучше без регулярного выражения. Чтобы проверить строку s
на bad_words
, попробуйте что-то вроде
s = s.lower()
any(bad in s for bad in bad_words)
Ваш bad_words
должен быть в нижнем регистре.