在Python中使用正则表达式验证IP地址

在Python中使用正则表达式验证IP地址,python,regex,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,它应该打印错误的,但打印正确的(

我正在尝试验证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,它应该打印
错误的
,但打印
正确的('4',)
作为输出。

我犯了一个错误,没有在
之前给出
\
,这导致它匹配任何字符

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"

len(ip.split(“.”)==4和all(map)(lambda o:o.isdigit()和int(o)如果允许
不使用regex
,可以使用python的套接字包。
inet_aton(“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")

它将检查所有有效的ip地址,如
192.168.1.257
无效,而
192.168.1.255
有效。

您应该删除
:1?
中的可选量词

否则,
是一个有效的ip地址。

可能很有趣:如果您需要调试正则表达式的帮助,我已经将其放入了。它可能对现在或将来有帮助!我不会说“从不”,但肯定不是为了这样的问题。+1为什么我不应该使用正则表达式?因为它们不可读。它是只写的东西。在编辑器或shell中使用它们可以一次使用(例如,我每天要做几十次),但不是在代码中。你也不应该重复你自己,你正在分裂两次,只是为了把它全部放在一行。@iced,关键是,不是所有的东西都可以或应该是一行代码。而且正则表达式在代码中也有它的用途,所以说永远不要使用它是完全错误的
    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")