在Python中使用regex验证IP地址

时间:2015-03-11 11:36:54

标签: python regex

我正在尝试验证IP地址。以下是代码。谁能告诉我代码中有什么问题?

import re

ip = '355.4'

m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5]).){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip)
if m:
    print "correct"
    print m.groups()
else:
    print "wrong"

根据给定的IP,它应该打印wrong作为输出,但它会输出correct ('4',)作为输出。

4 个答案:

答案 0 :(得分:2)

如果允许not to use regex,则可以使用python的套接字包。 inet_aton("string")string转换为ip地址,如果这不是有效的IP,则会抛出异常。

我尝试过的简单例子:

    import socket

    def check_valid(address):
        try:
            socket.inet_aton(address)
            return address.count('.') == 3
        except socket.error:
            return False

    if __name__ == "__main__":
        print check_valid("192.168.1.255")

192.168.1.257有效时,它会检查所有有效的IP地址,例如192.168.1.255无效。

答案 1 :(得分:0)

我在\之前没有给出.,这导致它与任何角色匹配,从而犯了一个错误。

import re

ip = '255.25.2.256'

m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])\.){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip)
if m:
    print "correct"
    print m.groups()
else:
    print "wrong"

答案 2 :(得分:0)

len(ip.split(".")) == 4 and all(map(lambda o: o.isdigit() and int(o) <= 255, ip.split(".")))

永远不要在代码中使用正则表达式。请。

答案 3 :(得分:0)

您应该删除?中的可选限定符:1?。 否则....是有效的IP地址。