Регулярное выражение Python (re.search) формат адреса ipv4Python

Программы на Python
Ответить
Anonymous
 Регулярное выражение Python (re.search) формат адреса ipv4

Сообщение Anonymous »

Я выполняю CS50P онлайн.
Вопрос просил нас проверить IP-адрес в формате IPv4.
Мой код:

Код: Выделить всё

def main():
ip = input("IPv4 Address: ")

if validate(ip):
print(validate(ip))
else:
print(validate(ip))

def validate(ip):
pattern = r"^(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-5][0-5]?)$"
match = re.search(pattern, ip)
if match:
return True
else:
return False

if __name__ == "__main__":
main()`

Мой вопрос: я не понимаю, почему это вернет False для 140.247.235.144?
Позже я изменил его на

Код: Выделить всё

def main():
ip = input("IPv4 Address: ")

if validate(ip):
print(validate(ip))
else:
print(validate(ip))

def validate(ip):
pattern = r"^(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.(0|[1-9][0-9]?|1[0-9][0-9]?|2[0-4][0-9]|25[0-5])$"
match = re.search(pattern, ip)
if match:
return True
else:
return False

if __name__ == "__main__":
main()

Теперь все работает нормально. Может кто-нибудь объяснить, пожалуйста? Кроме того, как я могу ужесточить его, если разрешено только REGEX?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ess-format
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»