W ramach nauki Pythona robię różne ćwiczenia znalezione w sieci. Obecnie z wyrażeń regularnych i utknąłem na jednym dotyczącym weryfikacji UIDa, który powinien spełniać następujące warunki:
A valid UID must follow the rules below:
* It must contain at least 2 uppercase English alphabet characters.
* It must contain at least 3 digits (0-9).
* It should only contain alphanumeric characters (a-z, A-Z & 0-9).
* No character should repeat.
* There must be exactly 10 characters in a valid UID.
Zrobiłem coś takiego:
pattern = r'(([a-zA-Z0-9]){10})(?=(.*[A-Z]){2,})(?=(.*[0-9]){3,})'
Brakuje mi koncepcji na to jak zrobić by znaki nie powtarzały się we wzorcu. Jakieś pomysły, którego z operatorów użyć?
Intuicja podpowiada, że powinienem nazwać sobie jakoś grupę (?P<znak>[a-zA-Z0-9]) i użyć jednego z operatorów patrzenia w tył/przód, ale nie wiem czy to dobry kierunek.