可以遍历单个IP和IP地址范围的python正则表达式

可以遍历单个IP和IP地址范围的python正则表达式,python,regex,Python,Regex,试图正则化提供多个ip地址范围和单个ip的能力。例如,字符串可以包含任意数量的单个IP或IP范围,例如 例1 ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200 或者它可以只包含一个IP 例2 ip=10.10.10.5 当我确切地知道我提供了多少IP或IP范围时,我能够计算出一个正则表达式。我迷茫的地方是我如何构建一个正则表达式,以便它可以在不知道将提供多少个IP和IP范围的情况下排除任何数量的IP和IP范围?我可以有4个类似于

试图正则化提供多个ip地址范围和单个ip的能力。例如,字符串可以包含任意数量的单个IP或IP范围,例如

例1

ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200
或者它可以只包含一个IP

例2

ip=10.10.10.5
当我确切地知道我提供了多少IP或IP范围时,我能够计算出一个正则表达式。我迷茫的地方是我如何构建一个正则表达式,以便它可以在不知道将提供多少个IP和IP范围的情况下排除任何数量的IP和IP范围?我可以有4个类似于示例1的组合,甚至最多10个不同的组合

更新:

根据回复,我得到了这个最终的正则表达式:

ip=(\d+(?:\.\d+){3}(?:-\d+)?,?)+
这至少在一个在线正则表达式测试仪中可以很好地捕捉到它,但在线测试仪我定义了一个我看到的组匹配:这不重要,我最终会想,因为我仍然得到我需要的完整匹配

Match 1
Full match  0-50    `ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.101.1.2`
Group 1.    40-50   `10.101.1.2`

为什么不能将ip=替换为零,只需在逗号上拆分字符串

ip = "ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200"


def get_ips(ips_list):
    return ips_list.replace("ip=", "").split(",")


print(get_ips(ip))
或者,如果你真的需要正则表达式:

import re

ip = "ip=10.10.10.3,10.10.10.20-80,10.10.10.4,10.10.11.100-200"


def get_ips_with_regex(ips_list):
    return re.findall(r"([\d.-]+)", ips_list)


print(get_ips_with_regex(ip))

不是最详细的正则表达式,但是如果你知道你只通过了它的IP,它会完成任务的

请不要把正则表达式扔到任何地方。使用合适的解析器。哈哈,那^。但是要回答你的问题,r'\d+?:\.\d+{3}?:-\d+?'将一个IP或IP范围的正则表达式放入一个组中,并在右侧后面使用+修饰符在组中重复一次或多次parenthesis@coldspeed谢谢:看到我的更新,我想我接受了你的反馈并添加到其中,我认为我所拥有的将起作用,即使它有一个小组赛,它仍然在寻找一个完整的比赛更正我,如果我错了,请:如果如果要将不同的地址分成不同的组,可以围绕主组中单个地址的正则表达式创建一个捕获组,即:\d+?:\。\d+{3}:-\d+?,?+或者可以使用逗号作为分隔符拆分完全匹配的字符串,最后一个解决方案可能更易于管理