【问题标题】:Python RE lib - returns match and NONEPython RE lib - 返回匹配和无
【发布时间】:2020-06-20 19:22:36
【问题描述】:

我的问题

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

我的问题

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

我做了什么

我已经通过 Regex101.com 验证了我的正则表达式
我已经尝试注释掉除 1 之外的所有方法调用,但得到相同的结果
我试过用 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'
>> 打印(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

即使更新后,输出中也没有变化

【问题讨论】:

    标签: python python-3.x output python-re named-captures


    【解决方案1】:

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

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

    更正的代码

    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
    

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2017-10-04
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 2010-12-07
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多