Python RE lib - возвращает совпадение и NONE - PullRequest
0 голосов
/ 20 июня 2020

Моя проблема

Я пытаюсь просто вернуть действительный IP (задача требует только 1-255.0-255.0-255.0-255, т.е. без ведущих нулей) Мое Regex соответствует очень хорошо, и у меня есть гораздо менее надежное решение, чтобы ответить на вопрос «правильно», но я пытаюсь понять, почему я получаю результат, который есть.

Мой вопрос

Почему после каждого вызова функции возвращается «NONE»?

Что я сделал

Я проверил свое регулярное выражение с помощью Regex101.com Я пробовал закомментировать все вызовы каждого метода, кроме одного, но получил тот же результат Я пробовал сделать это с помощью интерпретатора python

>> rev = re.compile (r "(? P ((((2 [0-4] \ d) | (25 [0-5])).?) {4})) ") >> x = rev.search ("255.255.255.255") >> x.group ("октет") "255.255.255.255" >> print (x.group ("октет")) 255.255.255.255

Что не вернуло никакого значения 'NONE' Наконец, я попытался добавить дополнительные функции Print (), чтобы узнать, когда будет возвращено значение «NONE». Насколько я могу судить, по какой-то причине в конце функции отправляется «НЕТ». Я пытался прочитать Python RE Docs , но не могу найти причину в списке.

My Code

import re
def ip_checker(var):
    print("-----1------")
    rev = re.compile(r"(?P<octet>(^([^0])(((25[0-5])|(2[0-4][0-9])|(1?[0-9][0-9])|([0-9]))\.?){4}$))")
    try:
        print("-----2------")
        x = rev.match(var)
        print(x.group("octet"))
        print("-----3a------")
    except:
        print("No Results")
        print("-----3b------")

#Method Calls
print(ip_checker("255.255.255.255")) # Returns True
print(ip_checker("0.0.0.0"))         # Returns False
print(ip_checker("192.168.0.55"))    # Returns True
print(ip_checker("0.156.37.15"))     # Returns False

My Output

-----1------
-----2------
255.255.255.255
-----3a------
None
-----1------
-----2------
No Results
-----3b------
None
-----1------
-----2------
192.168.0.55
-----3a------
None
-----1------
-----2------
No Results
-----3b------
None

Моя Python Версия

ПРИМЕЧАНИЕ: у меня есть Ma c, в котором явно указаны c версии Python, с которыми он работает?

me@hostname dir % python3 --version
Python 3.6.3

Просто чтобы убедиться, что я полностью обновлен

me@hostname dir % brew update && brew upgrade python
---
#Stuff I'm not gonna show...
#But it updated Portable Ruby & Python 
---
==> Upgrading 1 outdated package:
python 3.7.6_1 -> 3.7.7
---
me@hostname dir % python3 --version
Python 3.7.7

Даже после обновления никаких изменений в выход

1 Ответ

0 голосов
/ 20 июня 2020

Я нашел ответ, и это тип ответа «лицо-ладонь» ...

Я пытаюсь распечатать результат функции, но не возвращаю никакого результата.

Исправленный код

import re
def ip_checker(var):
    rev = re.compile(r"(?P<octet>(^([^0])(((25[0-5])|(2[0-4][0-9])|(1?[0-9][0-9])|([0-9]))\.?){4}$))")
    try:
        x = rev.match(var)
        return x.group("octet")
    except:
        return "No Results"

#Method Calls
print(ip_checker("255.255.255.255")) # Returns True
print(ip_checker("0.0.0.0"))         # Returns False
print(ip_checker("192.168.0.55"))    # Returns True
print(ip_checker("0.156.37.15"))     # Returns False

Вывод исправленного кода

255.255.255.255
ERROR: Bad Input
192.168.0.55
ERROR: Bad Input
...