如何解决/检查字符串中的字符是否不是不允许的字符?

时间:2015-06-12 01:01:19

标签: python string function

更具体地说,如果我有这样的字符串:

string = "app-_l#e"

现在,允许所有字母,数字,连字符和下划线;虽然没有任何其他角色。

是否有可以过滤掉指定类型和/或单个字符的函数?

2 个答案:

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