正则表达式的IPv4地址范围

时间:2015-06-23 05:06:03

标签: 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)。如何最好地捕获这样的范围而不必明确定义每个范围内的每个有效子范围?语言是Python。

作为参考,可以找到保留的IP地址和范围的完整列表here

2 个答案:

答案 0 :(得分:3)

首选使用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]

答案 1 :(得分: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']