尝试正则表达式提供多个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`
答案 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,那么它将完成这项工作