【问题标题】:Python regex to match IP rangePython正则表达式匹配IP范围
【发布时间】:2013-07-14 08:59:58
【问题描述】:

我想使用 Python 正则表达式匹配 IP 范围。

例如。 google bot IP 范围如下

66.249.64.0 - 66.249.95.255

re.compile(r"66.249.\d{1,3}\.\d{1,3}$")

我不知道该怎么做?我发现this 是使用 Java 完成的。

【问题讨论】:

  • 您是要在较大的文本中查找 IP 地址,还是您有一个仅包含 IP 地址的字符串?
  • @Joel Cornett:我有一个带有 IP 地址的文本文件,我想从中过滤一些 IP 地址
  • 旁注:如果您对网络地址做了大量工作,您可能需要查看netaddr package
  • @torek:非常感谢!

标签: python regex ip


【解决方案1】:

你可以用这个:

re.compile(r"66\.249\.(?:6[4-9]|[78]\d|9[0-5])\.\d{1,3}$")

如果您有动力,可以将\d{1,3} 替换为:

(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

解释:

正则表达式引擎不知道数字范围是什么。描述范围的唯一方法是用交替写出所有可能性:

6[4-9]  |  [78][0-9]  |  9[0-5] 

6          can be followed by    4 to 9   --> 64 to 69
7 or 8     can be followed by    0 to 9   --> 70 to 89
9          can be followed by    0 to 5   --> 90 to 95 

【讨论】:

  • 优秀..:) 工作得很好,非常感谢!
  • 还有一件事,你能解释一下吗?
【解决方案2】:

使用socket.inet_aton:

import socket
ip_min, ip_max = socket.inet_aton('66.249.64.0'), socket.inet_aton('66.249.95.255')

if ip_min <= socket.inet_aton('66.249.63.0') <= ip_max:
    #do stuff here

【讨论】:

    【解决方案3】:

    最后一位是:

    [01]?\d{1,2}|2[0-4]\d|25[0-5]
    

    第三位是:

    6[4-9])|[78]\d|9[0-5]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多