我想检查一个字符串是否包含不在白名单中的字符,如果确实如此,则必须丢弃该字符串。
白名单目前为abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,
,可能还有其他人。
从字符串(如提供的字符串)加载白名单非常重要,因为我可能需要稍后展开白名单。
答案 0 :(得分:2)
你不需要正则表达式。只需检查白名单中是否有任何字符:
whitelist_set = set(whitelist)
if any(c not in whitelist_set for c in my_string):
#discard
正如评论中提到的@jpp,首先将白名单转换为set
效率更高,因为O(1)
的查找将是O(n)
而不是list
。< / p>
答案 1 :(得分:0)
您可以使用.translate
删除白名单中的字符,然后测试是否还剩下任何字符:
>>> wl='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,'
>>> tbl=str.maketrans({}.fromkeys(wl))
>>> tst=tgt.translate(tbl)
# If tst, there are non whitelist characters...
这是翻译的Python 3版本。 Python 2将是:
>>> tgt.translate(None, wl)
# same test...
您也可以使用set arithmetic:
>>> if(set(tgt)-set(wl)): #discard...
如果你想使用正则表达式:
>>> re.search(r'[^'+wl+']',tgt)