在Python中组合多个前瞻性正则表达式的问题

时间:2017-09-04 18:40:54

标签: python regex lookahead negative-lookahead

我正在努力获得以下条件的正则表达式:

使用以下条件验证用户ID:

  1. 必须包含至少2个大写英文字母字符。
  2. 必须至少包含3位数字
  3. 它应该只包含字母数字字符
  4. 不应重复任何角色。
  5. 有效的UID中必须有10个字符。
  6. 当我单独检查但未合并时正常工作的正则表达式:

    ^(?=[a-zA-Z0-9]{10}$).*?(?=[A-Z][^A-Z]*?[A-Z]).*?(?=\d\D*?\d\D*?\d).*
    

    有人可以澄清为什么这不起作用吗?

    将每个条件分开时工作:

    一个。 re.findall(r'^(?=[a-zA-Z0-9]{10}$)', inp)

    re.findall(r'(?=[A-Z][^A-Z]*?[A-Z])', inp) ...

2 个答案:

答案 0 :(得分:0)

你可以使用正则表达式

(?!.*(.).*\1)(?=.*[A-Z].*[A-Z])(?=.*\d.*\d.*\d)[a-zA-Z0-9]{10}

请参阅regex101 demo

(?!。(。)。 \ 1)确保不会重复任何字符 (?=。 [A-Z]。 [A-Z])确保至少存在2个大写字母
(?=。 \ d。 \ d。* \ d)确保至少存在3位数字
[a-zA-Z0-9] {10}匹配10个字母数字字符

答案 1 :(得分:0)

这是你描述的正则表达式:

/(?=(?:.*[A-Z].*){2,})(?=(?:.*\d.*){3,})(?!=(.).*\1)(^[a-zA-Z0-9]{10}$)/

Demo