为什么我的正则表达式不能用于字符验证

2024-09-27 17:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这里我的(?=.*[a-z]{2})显式地检查2个小字符。但不能接受

import re
char = 'Massas23#'
if re.search(r"^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
    print ("match")
else:
    print ("Not Match")

我的输出是Match,预期是Not Match


Tags: importresearchifmatchnot字符else
2条回答

也许吧

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$

那就行了。你知道吗

(?!.*[a-z]{3})

表示不允许超过三个连续的小写字母。你知道吗

Demo 1

测试

import re

char = 'Massas23#'

if re.search(r"^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{2})(?=.*[@#$])[\w\d@#$]{6,12}$", char):
    print("match")
else:
    print("Not Match")

如果您希望简化/修改/探索表达式,在regex101.com的右上面板中已经解释过了。如果您愿意,还可以在this link中查看它如何与一些示例输入匹配。你知道吗


正则表达式电路

jex.im可视化正则表达式:

enter image description here


我想我们不是想匹配MAsSa23#,如果你想匹配的话

^(?!.*[a-z]{3})(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]{1,2})(?=.*[@#$])[\w\d@#$]{6,12}$

我会这么做的。你知道吗

Demo 2

您可以从character类中省略小写字符,然后正好匹配2个小写字符a-z

例如,可以使用contrast使用求反字符类来匹配非数字。你知道吗

^(?=.{6,12}$)(?=[^\d\s]*\d)(?=[^A-Z\s]*[A-Z])(?=[^@#$\s]*[@#$])[A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*$
  • ^字符串开头
  • (?=.{6,12}$)断言6-12个字符
  • (?=[^\d\s]*\d)断言一个数字
  • (?=[^A-Z\s]*[A-Z])断言一个大写字符
  • (?=[^@#$\s]*[@#$])断言一个特殊字符
  • [A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*[a-z][A-Z0-9_@#$]*匹配2个小写a-z
  • $字符串结尾

Regex demo

请注意

  • [\d]不必在方括号之间
  • [\w\d@#$]\w也匹配\d,因此可以从character类中省略它

相关问题 更多 >

    热门问题