python IP验证完整和部分IP的REGex验证

A.R*_*R.B 1 python regex ip

我试图验证输入,看它是否是一个有效的IP地址(可能是部分IP地址).

可接受的输入:172,172.112,172.112.113,172.112.113.114

不可接受的输入:1724,172.11113等

下面是我创建的一个函数来检查它(但它验证了不可接受的输入,如1724,我似乎无法修复..请帮助)

def ipcheck(ip):
    ippattern_str = '(([1-2]?[\d]{1,2}\.?){0,1}(\.[1-2]?[\d]{1,2}){0,1}(\.[1-2]?[\d]{1,2}\.){0,1}(([1-2]?[\d]{1,2}[\D\W]*)'
    ippattern = re.compile(ippattern_str)
    # ippattern is now used to call match, passing only the ip string
    global matchip
    matchip = ippattern.match(ip)
    return matchip


ip = sys.argv[1]
ipcheck(ip)

print matchip
Run Code Online (Sandbox Code Playgroud)

我觉得我可能需要正确使用锚点?我已经尽力了解所有的知识,任何帮助将不胜感激.

Céd*_*ien 7

也许你可以避免使用正则表达式让python socket.inet_aton完成这项工作:

import socket

try:
    socket.inet_aton(addr)
    # correct IP
except socket.error:
    # bad IP
Run Code Online (Sandbox Code Playgroud)

对于inet_aton,有效的IP地址是这样的形式:

       a.b.c.d
       a.b.c
       a.b
       a
Run Code Online (Sandbox Code Playgroud)

在所有上述形式中,虚线地址的组件可以用十进制,八进制(带前导0)或十六进制指定,前导0X.任何这些形式的地址统称为IPV4数字和点符号.使用正好四个十进制数的表单称为IPv4点分十进制表示法(或者有时称为IPv4点四符号表示法).

资源