检查字符串是否包含python中的特殊字符

时间:2014-09-30 21:42:20

标签: python regex python-2.7

我想检查密码是否包含特殊字符。我搜索了一些例子,但无法找到解决我的问题。我该怎么做?这是我到目前为止尝试的方式;

elif not re.match("^[~!@#$%^&*()_+{}":;']+$",password)
        print "Invalid entry."
        continue

我的字符串是密码。

2 个答案:

答案 0 :(得分:7)

你不需要正则表达式。尝试:

elif set('[~!@#$%^&*()_+{}":;\']+$').intersection(password):
    print "Invalid entry."

引号已在字符串中转义。这样做是创建一个包含所有无效字符的集合,然后取它与password的交集(换句话说,包含集合和密码字符串中存在的所有唯一字符的集合)。如果没有匹配项,则结果集将为空,因此评估为False,否则将评估为True并打印消息。

答案 1 :(得分:0)

特殊字符串中的几个符号在正则表达式中具有特殊含义,必须进行转义。您收到语法错误,因为您在由双引号描述的字符串中间包含",因此Python完成处理字符串,然后阻塞它之后看到的垃圾。试试这个:

elif not re.match(r"[~\!@#\$%\^&\*\(\)_\+{}\":;'\[\]]", password):
    print "Invalid entry"
    continue

我使用了原始字符串文字,你应该总是在正则表达式中使用它。我转义了需要转义的字符,并简化了表达式,因为字符串标记的开始^和结束$是不必要的 - 只要1匹配,它将返回True,并将跳过以下代码。

如有疑问,请逃避:)