正则表达式:如何匹配以:: \ + +(Python)结尾的IPv6地址?

时间:2015-06-05 20:20:01

标签: python regex

IPv6地址给出here的正则表达式适用于我想要提取的大多数IPv6地址。

但地址 2607:f8b0:4001:c03 :: 247 (mail-ie0-x247.google.com)不足,只匹配最后两个冒号,因此 2607:f8b0:4001:C03 ::

我们如何扩展正则表达式(对于Python),以便捕获这样的情况(不会破坏其他变体?我不确定Google如何设置其IPv6地址,但我猜它'可以想象,在最后两个冒号之后的角色可能是字母和数字的混合,所以正则表达式也应该处理它。

1 个答案:

答案 0 :(得分:4)

我建议尽可能避免使用RegEx,因为手动执行此操作通常会导致错误(例如,您无法检查此RegEx是否实际适用于每个可能的IPv6地址)。

一些更好的解决方案(在我看来)是使用内置的ip adress manipulation library

import ipaddress

sample_addr = "2001:db8::"

try:
    # executed if (and only if) ip address is valid
    ipaddress.ip_address(sample_addr)
except ValueError:
    print "address invalid"
    # further error handling

ip_address()返回IPv6或IPv4对象(取决于输入),如果输入无效,则会引发ValueError。