我想检查密码是否包含特殊字符。我搜索了一些例子,但无法找到解决我的问题。我该怎么做?这是我到目前为止尝试的方式;
elif not re.match("^[~!@#$%^&*()_+{}":;']+$",password)
print "Invalid entry."
continue
我的字符串是密码。
答案 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,并将跳过以下代码。
如有疑问,请逃避:)