正则表达式:检查字符串是否包含非白名单字符

2024-04-24 14:59:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查一个字符串是否包含不在白名单中的字符,如果这是真的,则必须丢弃该字符串。你知道吗

白名单目前是abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,,可能还有其他白名单。你知道吗

从字符串(如提供的字符串)加载白名单对我来说非常重要,因为我以后可能需要扩展白名单。你知道吗


Tags: 字符串字符abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789
2条回答

您可以使用.translate删除白名单中的字符,然后测试是否还有任何字符:

>>> wl='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,'
>>> tbl=str.maketrans({}.fromkeys(wl))
>>> tst=tgt.translate(tbl)
# If tst, there are non whitelist characters...

这是python3版本的translate。Python 2将是:

>>> tgt.translate(None, wl)
# same test...

也可以使用集合算法:

>>> if(set(tgt)-set(wl)): #discard...

如果要使用正则表达式:

>>> re.search(r'[^'+wl+']',tgt)

你不需要正则表达式。只需检查是否有任何字符不在白名单中:

whitelist_set = set(whitelist)
if any(c not in whitelist_set for c in my_string):
#discard

正如@jpp在评论中提到的,首先将白名单转换为set更有效,因为对于list,查找将是O(1),而不是O(n)。你知道吗

相关问题 更多 >