Python >> Tutoriel Python >  >> Python Tag >> RegEx

Regex Aucun caractère ne doit se répéter

Vous pouvez utiliser cette expression régulière avec 3 assertions d'anticipation, satisfaisant toutes vos conditions :

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

Démo RegEx

Description de l'expression régulière :

  • ^ :Démarrer
  • (?=(?:[a-z\d]*[A-Z]){2}) :Anticiper pour affirmer qu'on a au moins 2 alphabets majuscules
  • (?=(?:\D*\d){3}) :Lookahead pour affirmer que nous avons au moins 3 chiffres
  • (?:([a-zA-Z\d])(?!.*\1)){10} :Faites correspondre exactement 10 caractères alphanumériques. L'anticipation négative consiste à affirmer que rien ne se répète nulle part.
  • $ :Fin

En savoir plus sur regarder devant et regarder derrière

Code :

reg = re.compile(r'^(?=(?:[a-z\d]*[A-Z]){2})(?=(?:.*\d){3})(?:([a-zA-Z\d])(?!.*\1)){10}$')
arr = ['A1b2c3d4eF', 'B1CDEF2354', 'aBcDdef122', 'B1CD102354', 'a1bcf2coqb', 'a1bcf2oo3b', '1234567890']

for i in arr:
      print i, reg.match(i)

import re
n = int(input())
patt = r'^(?=(?:[a-z\d]*[A-Z]){2})(?=(?:\D*\d){3})(?:([a-zA-Z\d])(?!.*\1)){10}$'
for x in range(n):
    match=re.match(patt,str(input()))
    if match:
        print("Valid")
    else:
        print("Invalid")