Warm tip: This article is reproduced from serverfault.com, please click

python-正则表达式表达式,用于检查字符串是否符合特定条件

(python - Regex expression to check if string obeys certain conditions)

发布于 2020-11-28 06:34:46

我需要编写一个带字符串的python函数,并使用REGEX来检查字符串是否包含:

  1. 至少1个大写字母;
  2. 至少2位数字;
  3. 恰好2个特殊字符,!@#$&* -_。
  4. 长度为6-8个字符;

如果存在,则返回true,否则返回false。我对函数很满意,但是正则表达式遇到了麻烦。

到目前为止,我有: [A-Z]+\d{2,}[!@#\$&\*-_\.]{2}

我知道这行不通,因为我对regex不熟悉,所以我真的很困惑。

谢谢你的帮助!

Questioner
Segmentation Fault
Viewed
12
The fourth bird 2020-11-28 21:43:07

你可以使用

^(?=[^A-Z\r\n]*[A-Z])(?=[^\d\r\n]*\d[^\d\r\n]*\d)(?=.{6,8}$)[A-Z\d]*[!@#$&*_.-][A-Z\d]*[!@#$&*_.-][A-Z\d]*$

请注意\-在字符类中转义或将其放在开头或结尾。否则它将表示一个范围。

解释

  • ^ 字符串开始
  • (?=[^A-Z\r\n]*[A-Z]) 积极向前看,断定字符AZ
  • (?=[^\d\r\n]*\d[^\d\r\n]*\d) 正向向前看,断言2位数字
  • (?=.{6,8}$) 正向超前,断言总共6至8个字符
  • [A-Z\d]*[!@#$&*_.-][A-Z\d]*[!@#$&*_.-][A-Z\d]* 匹配2个“特殊”字符
  • $字符串的结尾(或者,\Z如果后面没有换行符,请使用

正则表达式演示