IPv6地址给出here的正则表达式适用于我想要提取的大多数IPv6地址。
但地址 2607:f8b0:4001:c03 :: 247 (mail-ie0-x247.google.com)不足,只匹配最后两个冒号,因此 2607:f8b0:4001:C03 ::
我们如何扩展正则表达式(对于Python),以便捕获这样的情况(不会破坏其他变体?我不确定Google如何设置其IPv6地址,但我猜它'可以想象,在最后两个冒号之后的角色可能是字母和数字的混合,所以正则表达式也应该处理它。
答案 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。