【问题标题】:check if string contains special characters in python检查字符串是否包含python中的特殊字符
【发布时间】:2014-11-25 15:48:08
【问题描述】:

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

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

我的字符串是密码。

【问题讨论】:

  • 你没有得到语法错误?

标签: python regex python-2.7


【解决方案1】:

您不需要正则表达式。试试:

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

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

【讨论】:

    【解决方案2】:

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

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

    我使用了一个原始字符串文字,您应该始终在正则表达式中使用它。我转义了需要转义的字符,并稍微简化了您的表达式,因为字符串标记的开头 ^ 和结尾 $ 不是必需的 - 一旦进行了 1 个匹配,它将返回 True,并且将跳过以下代码。

    如有疑问,请逃跑:)

    【讨论】:

    • 您不想要elif 而不是elif not 吗?如果密码与正则表达式不匹配,似乎您正在打印“无效条目”。
    • @celeritas 是的,这就是你想要发生的事情。如果匹配成功,则密码至少包含 1 个特殊字符,因此它是“好”的。如果正则表达式匹配password,则其值为True。您需要否定它才能运行缩进的代码。想一想……
    • 是的,我在想 OP 想要确保密码不包含特殊字符。
    • 您不需要所有这些反斜杠。大多数特殊字符在方括号内失去了它们的特殊能力。
    • @Bryan 没错,但正如我所说,当有疑问时,逃跑!我仍然对正则表达式感到满意,并且还没有完全记住所有规则。
    猜你喜欢
    • 2010-12-20
    • 2016-08-24
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2019-08-15
    • 2023-04-05
    相关资源
    最近更新 更多