Python IPv4地址范围的正则表达式
对于类似169.254.0.0/16或192.168.0.0/16的IPv4地址范围,为每个地址构造一个正则表达式非常简单,因为一旦精确匹配了前6位,就完成了 但是,在一个更宽松的保留范围内匹配任何地址,比如Python IPv4地址范围的正则表达式,python,regex,Python,Regex,对于类似169.254.0.0/16或192.168.0.0/16的IPv4地址范围,为每个地址构造一个正则表达式非常简单,因为一旦精确匹配了前6位,就完成了 但是,在一个更宽松的保留范围内匹配任何地址,比如 100.64.0.0 – 100.127.255.255 以100\.开头的正则表达式是不够的,因为会有超出100.64和100.127界限(例如100.65.0.0、100.127.255.256)的数字被错误匹配。如何最好地捕获这样的范围,而不必显式定义每个范围内的每个有效子范围?语
100.64.0.0 –
100.127.255.255
以100\.
开头的正则表达式是不够的,因为会有超出100.64和100.127界限(例如100.65.0.0、100.127.255.256)的数字被错误匹配。如何最好地捕获这样的范围,而不必显式定义每个范围内的每个有效子范围?语言是Python
为了便于参考,可以找到保留IP地址和范围的完整列表 首选使用IPv4解析库。如果你坚持使用正则表达式
re.search('^(100\.(6[4-9][7-9]\d|1[0-1]\d|12[0-7])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){2},text)
您可以看到,我正在单独搜索:
- 64-69(
)6[4-9]
- 70-99(
)[7-9]\d
- 100-119(
)1[0-1]\d
- 120-127(
)12[0-7]
- 0-9(
)\d
- 10-99(
)[1-9]\d
- 100-199(
)1\d\d
- 200-249(
)2[0-4]\d
- 250-255(
)25[0-5]
re.search('^(100\.(6[4-9][7-9]\d|1[0-1]\d|12[0-7])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){2},text)
您可以看到,我正在单独搜索:
- 64-69(
)6[4-9]
- 70-99(
)[7-9]\d
- 100-119(
)1[0-1]\d
- 120-127(
)12[0-7]
- 0-9(
)\d
- 10-99(
)[1-9]\d
- 100-199(
)1\d\d
- 200-249(
)2[0-4]\d
- 250-255(
)25[0-5]
re.search('^(100\.(6[4-9][7-9]\d|1[0-1]\d|12[0-7])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){2},text)
您可以看到,我正在单独搜索:
- 64-69(
)6[4-9]
- 70-99(
)[7-9]\d
- 100-119(
)1[0-1]\d
- 120-127(
)12[0-7]
- 0-9(
)\d
- 10-99(
)[1-9]\d
- 100-199(
)1\d\d
- 200-249(
)2[0-4]\d
- 250-255(
)25[0-5]
re.search('^(100\.(6[4-9][7-9]\d|1[0-1]\d|12[0-7])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){2},text)
您可以看到,我正在单独搜索:
- 64-69(
)6[4-9]
- 70-99(
)[7-9]\d
- 100-119(
)1[0-1]\d
- 120-127(
)12[0-7]
- 0-9(
)\d
- 10-99(
)[1-9]\d
- 100-199(
)1\d\d
- 200-249(
)2[0-4]\d
- 250-255(
)25[0-5]
- 这是一种方法:
import re
print re.findall(r'\d+\.\S+\d', 'fdgsdfg 100.127.255.255 ggffgsdf 100.64.0.0 asdffsdf')
输出:
['100.127.255.255', '100.64.0.0']
这是一种方法:
import re
print re.findall(r'\d+\.\S+\d', 'fdgsdfg 100.127.255.255 ggffgsdf 100.64.0.0 asdffsdf')
输出:
['100.127.255.255', '100.64.0.0']
这是一种方法:
import re
print re.findall(r'\d+\.\S+\d', 'fdgsdfg 100.127.255.255 ggffgsdf 100.64.0.0 asdffsdf')
输出:
['100.127.255.255', '100.64.0.0']
这是一种方法:
import re
print re.findall(r'\d+\.\S+\d', 'fdgsdfg 100.127.255.255 ggffgsdf 100.64.0.0 asdffsdf')
输出:
['100.127.255.255', '100.64.0.0']
欺骗为什么不使用IP地址库呢?或者@TessellatingHeckler,因为ipaddress.ip_地址只会告诉我一个地址是有效的。它不能帮助我检测保留的IP地址。@Pyderman是的,它可以<代码>尝试:addr=ipv4地址(文本);除了ValueError:print(“不是有效的IP地址”)
如果在IPv4Network(“100.64.0.0/10”)中添加了addr:print(“这是一个保留地址”)
@Pyderman您错过了Python容器类型的奇迹。“网络地址”。在IPv4Network('100.64.0.0/10')中尝试IPv4Address('100.64.1.1')
,它将显示True。在IPv4Network('100.64.0.0/10')中尝试IPv4Address('100.63.1.1')
,它是假的吗?为什么不使用IP地址库呢?或者@TessellatingHeckler,因为ipaddress.ip_地址只会告诉我一个地址是有效的。它不能帮助我检测保留的IP地址。@Pyderman是的,它可以<代码>尝试:addr=ipv4地址(文本);除了ValueError:print(“不是有效的IP地址”)如果在IPv4Network(“100.64.0.0/10”)中添加了addr:print(“这是一个保留地址”)
@Pyderman您错过了Python容器类型的奇迹。“网络地址”。在IPv4Network('100.64.0.0/10')中尝试IPv4Address('100.64.1.1')
,它将显示True。在IPv4Network('100.64.0.0/10')中尝试IPv4Address('100.63.1.1')
,它是假的吗?为什么不使用IP地址库呢?或者@TessellatingHeckler,因为ipaddress.ip_地址只会告诉我一个地址是有效的。它不能帮助我检测保留的IP地址。@Pyderman是的,它可以<代码>尝试:addr=ipv4地址(文本);除了ValueError:print(“不是有效的IP地址”)如果在IPv4Network(“100.64.0.0/10”)中添加了addr:print(“这是一个保留地址”)
@Pyderman您错过了Python容器类型的奇迹。“网络地址”。在IPv4Network('100.64.0.0/10')中尝试IPv4Address('100.64.1.1')
,它将显示True。在IPv4Network('100.64.0.0/10')中尝试IPv4Address('100.63.1.1')
,它是假的吗?为什么不使用IP地址库呢?或者@TessellatingHeckler,因为ipaddress.ip_地址只会告诉我一个地址是有效的。它不能帮助我检测保留的IP地址。@Pyderman是的,它可以<代码>尝试:addr=ipv4地址(文本);除了ValueError:print(“不是有效的IP地址”)如果地址在IPv4Network('100.64.0.0/10'):print(“这是一个保留地址”)
@Pyderman您错过了Python的奇迹