【发布时间】:2014-02-11 22:03:34
【问题描述】:
我有一个坏词列表。假设它是:
BAD_WORDS = ['bw1', 'bw2',...]
现在我想知道在如下代码中检查长字符串(又名 django 请求帖子)的最有效方法是什么:
if re.search(comment.body) in BAD_WORDS:
dosomething;
【问题讨论】:
我有一个坏词列表。假设它是:
BAD_WORDS = ['bw1', 'bw2',...]
现在我想知道在如下代码中检查长字符串(又名 django 请求帖子)的最有效方法是什么:
if re.search(comment.body) in BAD_WORDS:
dosomething;
【问题讨论】:
最好的办法是对所有的坏词使用一种表达方式:
import re
bad_words = ['bw1', 'bw2', ... ]
my_expression = '|'.join(re.escape(word) for word in bad_words)
if re.search(my_expression, comment.body):
do_something()
【讨论】:
flags=re.IGNORECASE 传递给 re.search 以解决不区分大小写的问题。
ass 是受审查的作品,但ASS 是情感智人协会等。
re.search(my_expression, comment.body, flags=re.IGNORECASE)
您可以为此使用any。
要仅匹配子字符串而不是精确单词,您可以使用in 运算符:
if any(word in comment.body for word in BAD_WORDS):
#do something
要匹配确切的单词,请使用regex:
import re
if any(re.search(r'\b{}\b'.format(re.escape(word)), comment.body)
for word in BAD_WORDS):
#do something
【讨论】: