0

我的问题

我试图只返回有效的 IP(任务只需要 1-255.0-255.0-255.0-255,即没有前导 0)
我的正则表达式匹配得很好,而且我有一个不太可靠的解决方案来解决“正确”的问题但我试图理解为什么我会得到我的输出。

我的问题

为什么每次函数调用后都会返回“NONE”?

我做了什么

我已经用 Regex101.com 验证了我的正则表达式
我已经尝试注释掉除 1 之外的所有方法调用,但得到的结果与
我尝试从 python 解释器执行此操作的结果相同

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

没有返回任何 'NONE' 值
最后,我尝试添加额外的 Print() 以查看何时返回 'NONE' 值。
我能确定的最好的结果是,由于某种原因,在函数结束时发送了“NONE”。
我一直在尝试阅读Python RE Docs,但似乎找不到列出的原因。

我的代码

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

我的输出

-----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 版本

注意:我有一台 Mac,它显然有特定版本的 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

即使在更新之后,输出中也没有看到任何变化

4

1 回答 1

0

我找到了答案,而且它是一个掌上型的答案......

我正在尝试打印函数的输出,但没有返回任何输出。

更正的代码

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
于 2020-06-20T19:33:42.053 回答