Как я недавно узнал от другого пользователя на SO, \w
включает \d
.Следовательно, '^\w\d{2}\w{5}$'
, как предлагают некоторые пользователи здесь, будет соответствовать, например, 12345678
.
. Чтобы это исправить, просто укажите класс символов явно:
import re
regex = re.compile('^[A-Za-z]\d{2}[A-Za-z]{5}$')
while True:
password = input('Please enter a password: ')
if regex.search(password):
print('Yay! Your password is valid!')
break
else:
print("Oh no, that's not right. You need a letter, then two numbers, then five letters. ", end='')