Python IPv4地址范围的正则表达式

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)的数字被错误匹配。如何最好地捕获这样的范围,而不必显式定义每个范围内的每个有效子范围?语

对于类似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地址和范围的完整列表

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

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

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

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

    • 这是一种方法:

      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的奇迹