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

时间:2018-02-20 11:31:49

标签: 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范围,而不知道将提供多少?我可以像示例1中的4或甚至多达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`

1 个答案:

答案 0 :(得分:1)

为什么不能用“ip =”替换“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,那么它将完成这项工作