#python #python_3x #регулярные_выражения
После запуска программы (на Python), даже когда ввожу подходящий пароль, пишет Password not valid import re passRegex = re.compile(r'[a-zA-Z0-9]{8,}') # Символы допустимые в пароле myPass = input() # Пароль, который будем проверять if re.match(passRegex, myPass) is not myPass: print('Password not valid') else: print('Valid password') Что делаю не так?
Ответы
Ответ 1
Комманда if re.match(passRegex, myPass) is not myPass: не правильна (к тому же использует myPass дважды, что само особе сомнительное). Замените часть if re.match(passRegex, myPass) is not myPass: print('Password not valid') else: print('Valid password') на if re.match(passRegex, myPass): print('Valid password') else: print('Password not valid') Заметите, пожалуйста, взаимной обмен тел ветвей if и else.Ответ 2
Здесь две ошибки, одна в самом коде, другая - в регулярном выражении (или же снова эту ошибку можно исправить с помощью кода): re.match возвращает объект совпадения (match data object) или, при отсутствии совпадения, None. Поэтому if re.match(passRegex, myPass) is not myPass неверно, так как всегда верно. re.match ищет совпадение только в начале строки. Так как пароль должен состоять из 8 и более букв или цифр, необходимо либо добавить в конце регулярного выраджения знак $ (конец строки, чтобы требовалось совпадение целой строки), либо - в Python 3.x - можно воспользоваться методом re.fullmatch, который требует совпадения целой строки. Для совместимости с Python 2.x, приведу следующий пример исправленного кода с использованием re.match: passRegex = re.compile(r'[a-zA-Z0-9]{8,}$') if passRegex.match(myPass): print('Пароль верный') else: print('Неверный пароль') Обратите внимание, объект passRegex - это уже скомпилированное регулярное выражение, можно использовать метод match данного объекта напрямую.Ответ 3
re.match(passRegex, myPass) Эта строка кода возвращает объект не строкового типа, поэтому сравнивать его с Вашим паролем некорректно. Поменяйте условие на is not None: и местами сообщения.
Комментариев нет:
Отправить комментарий