更具体地说,如果我有这样的字符串:
string = "app-_l#e"
现在,允许所有字母,数字,连字符和下划线;虽然没有任何其他角色。
是否有可以过滤掉指定类型和/或单个字符的函数?
答案 0 :(得分:3)
您可以使用str.translate从字符串中删除允许的字符,如果字符串中只允许使用字符,则使用空字符串,或者使用一串禁止字符:
from string import ascii_letters, digits
s = "app-_l#e"
# if the string is empty
if not s.translate(None, "-_" + ascii_letters + digits):
# string only contains allowed characters
翻译后,您的输入字符串将如下所示:
In [7]: from string import ascii_letters, digits
In [8]: s = "app-_l#e"
In [9]: s.translate(None, "-_" + ascii_letters + digits)
Out[9]: '#'
或保留set个允许的字符:
from string import ascii_letters, digits
allowed = set("-_" + ascii_letters + digits)
s = "app-_l#e"
if all(ch in allowed for ch in s):
# string only contains allowed characters
你想知道字符串中的禁止字符是print s.translate(None, "-_" + ascii_letters + digits)
哪个只有不允许的字符或者在for循环中迭代:
from string import ascii_letters, digits
allowed = set("-_" + ascii_letters + digits)
s = "app-_l#e"
disallowed = [ch for ch in s if ch not in allowed]
答案 1 :(得分:3)
您可以使用re
,但请注意它会慢一些。
>>> import re
>>> pat = re.compile(r'[\d|\w|\-|_]+$')
>>> if pat.match("app-_l#e"):
... print True
... else:
... print False
...
False
一个匹配的例子
>>> if pat.match("apple123_-"):
... print True
... else:
... print False
...
True