我有一系列被禁止的关键字(取自Adwords):
360Dreams
Cannabidiol (CBD)
rage
ナプロキセン
يفيترا
คอนเซอตา
คอนเซอต้า
我希望看一个字符串是否包含任何这些单词。
我的第一种方法涉及此if keyword.lower() in mystring.lower()
,但我很快意识到术语rage
正在标记句子
本产品采用Ancho rage 制造。
我考虑过使用正则表达式以字母数字方式对输入字符串进行标记,但是如果查看禁止关键字列表,其中一些字符包含非字母数字字符。
答案 0 :(得分:0)
你可以构造一个正则表达式模式,当它找到一个双方都有空格或字符串边界的禁止词时匹配:
import re
banned = [re.escape(line) for line in
'''360Dreams
Cannabidiol (CBD)
rage
ナプロキセン
يفيترا
คอนเซอตา
คอนเซอต้า'''.splitlines()]
pattern = r'(^|\s)(%s)($|\s)' % '|'.join(banned)
这是一个演示:
text = 'hello world Cannabidiol (CBD) stuff RAGE anchorage things 360Dreams'
print(re.sub(pattern, '****', text, flags=re.IGNORECASE | re.UNICODE))
# hello world****stuff****anchorage things****
在实践中,您需要检查re.search(pattern, text, flags=re.IGNORECASE | re.UNICODE)
。