如何检查字符串中是否只有定义的符号?

时间:2012-04-25 07:57:25

标签: python python-3.x

我需要检查字符串是否只包含预定义的符号列表,并执行以下操作:

my_string = 'qwer123asd!@#$%^'
tmp = str.maketrans({'0': None, 'x': None, '#': None, '$': None, 'q': None, 'i': None})
if my_string.translate(tmp) == '':
    print("Only predefined symbols!")

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:4)

my_string = 'qwer123asd!@#$%^'
predef = set('0x#$qi')

if set(my_string).issubset(predef):
    print "only predefined symbols"

答案 1 :(得分:2)

我经常提倡使用regexp的替代品,因为我认为它通常用作寻找问题的解决方案,但在这种情况下我认为它可能是合适的。

import re
pat = re.compile("^[0x#$qi]*$")
my_string = 'qwer123asd!@#$%^'
if pat.match(my_string):
    print("Only predefined symbols!")

请确保如果"]"是您预定义的符号之一,则它是方括号内的第一个符号。

使用euromino的set方法进行快速比较表明,使用您在问题中使用的字符串,速度提高了3倍。 patpredef的创建被排除在时间之外,因此这是“重复使用”方案。如果包含它们,差异会更小,但正则表达式仍然更快。