RegEx:检查字符串是否包含非白名单字符

时间:2018-06-16 13:48:24

标签: python regex

我想检查一个字符串是否包含不在白名单中的字符,如果确实如此,则必须丢弃该字符串。

白名单目前为abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,,可能还有其他人。

从字符串(如提供的字符串)加载白名单非常重要,因为我可能需要稍后展开白名单。

2 个答案:

答案 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)