2024-04-24 14:59:30 发布
网友
我想检查一个字符串是否包含不在白名单中的字符,如果这是真的,则必须丢弃该字符串。你知道吗
白名单目前是abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,,可能还有其他白名单。你知道吗
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.,
从字符串(如提供的字符串)加载白名单对我来说非常重要,因为我以后可能需要扩展白名单。你知道吗
您可以使用.translate删除白名单中的字符,然后测试是否还有任何字符:
.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)。你知道吗
set
list
O(1)
O(n)
您可以使用
.translate
删除白名单中的字符,然后测试是否还有任何字符:这是python3版本的translate。Python 2将是:
也可以使用集合算法:
如果要使用正则表达式:
你不需要正则表达式。只需检查是否有任何字符不在白名单中:
正如@jpp在评论中提到的,首先将白名单转换为
set
更有效,因为对于list
,查找将是O(1)
,而不是O(n)
。你知道吗相关问题 更多 >
编程相关推荐