Давайте пройдемся по вашему текущему регулярному выражению, ([0-10000000][a-z][A-Z])
:
[0-10000000]
соответствует одному символу в диапазоне 0-1 или символу 0
. [a-z]
затем соответствует одному символу в диапазоне az. [A-Z]
соответствует одному символу в диапазоне AZ.
Чтобы сложить все вместе: соответствует номеру 0 или 1, за которым следует строчная буква, а затем заглавная буква. Это сильно отличается от того, что вы намеревались.
Регулярное выражение, которое я придумал, это: ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-z]{5,8}$
. Я сохранил его на Regex101 , чтобы вы могли легко увидеть, что он делает, и протестировать его.
Вот пример программы:
import re
pwd_patt = re.compile(r"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-z]{5,8}$")
test_strs = ["Amc01", "Ac", "aa0aa", "aa0aaAadwaw", "ghG789"]
for curr_str in test_strs:
print(curr_str, pwd_patt.fullmatch(curr_str))
Вывод:
Amc01 <re.Match object; span=(0, 5), match='Amc01'>
Ac None
aa0aa None
aa0aaAadwaw None
ghG789 <re.Match object; span=(0, 6), match='ghG789'>