【问题标题】:IP match using regular expression in python 2.7在 python 2.7 中使用正则表达式进行 IP 匹配
【发布时间】:2017-11-30 10:31:35
【问题描述】:

我需要一些帮助来修复我的验证 IP 地址的脚本。

我的程序:-

重新导入

ip_add = raw_input("输入要验证的IP地址:")

valid_ip = re.search('^[1-255]+.[0-255]+.[0-255]+.[0-254]+$', ip_add)

如果有效_ip:

print ip_add, " is valid"

其他:

print ip_add, " is not valid"

输出 输入要验证的 IP 地址:1.1.1.254 1.1.1.254有效

但它不应该与 1.1.1.255 匹配,因为最后是 [0-254]+$

【问题讨论】:

    标签: python-2.7


    【解决方案1】:

    [1-255]+.[0-255]+.[0-255]+.[0-254] 正则表达式接受 IP 1.1.1.25,+$ 接受 255 的第二个“5”。

    也许对于 IP 正则表达式问题有一个更简单的解决方案,但我建议使用这个:

    ^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])$
    

    【讨论】:

    • 感谢@AndreyF 的帮助。
    【解决方案2】:

    由于正则表达式逐个字符地工作,恕我直言不可能或至少很难匹配特定的数字范围。相反,我建议使用两步验证,在正则表达式匹配后检查允许的范围。

    ip_raw = raw_input("Enter IP address to Validate : ")
    ip_match = re.match('^(d+).(d+).(d+).(d+)$', ip_raw)
    if ip_match:
      a,b,c,d = re.groups()
      ip_valid = 1 <= a <= 255 and 1 <= b <= 255 and 1 <= c <= 255 and 1 <= d <= 254
    

    【讨论】:

    • 感谢@PeterE 的新方法。
    【解决方案3】:

    合并所有更改后。 我的 IP 验证程序如下:-

    import re
    
    ip_add = raw_input("Enter IP address to Validate : ")
    ip_match = re.search(r'^(\d+)\.(\d+)\.(\d+)\.(\d+)$', ip_add)
    
    if ip_match:
        a,b,c,d = ip_match.groups()
        ip_valid = 1 <= int(a) <= 255 and 1 <= int(b) <= 255 and 1 <= int(c) <= 255 and 1 <= int(d) <= 254
        if ip_valid:
            print ip_add, " is valid IP"
        else:
            print ip_add, " is not valid IP"
    else:
        print ip_add, " not valid IP "
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多