首页 > 解决方案 > 如何在配置单元表上应用正则表达式进行 IP 地址过滤?

问题描述

我有蜂巢表:

       department     ip 
          A           10.192.168.2
          B           172.16.0.1
          A           10.192.168.23
          B           172.16.0.24
                      10.192.168.56

我想在 ip 列上使用正则表达式,以便我只能获取 ip 范围内的记录,如下所示

输出 :

       department     ip 
          A           10.192.168.2
          A           10.192.168.23
                      10.192.168.56

这里A部门的ip范围是10.0.0.0到10.255.255.255。

标签: regexhivepysparkpyspark-sql

解决方案


首先,看这个:https ://www.regular-expressions.info/ip.html

正则表达式不是此任务的工具,因为要进行严格检查,您需要不可读的复杂正则表达式。另请阅读:使用 regexp 验证 IPv4 地址。严格的正则表达式看起来太复杂了。如果可能,像这样应用简单的正则表达式:

where IP rlike '^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$'

或者,如果您需要严格检查,则拆分 IP 地址.并检查每个八位字节的范围,像这样,看起来比严格的正则表达式(未测试)更简单:

 select department, ip 
 from
 (
 select department, ip, split(ip, '\\.') i
   from your_table t
 )s where  i[0]=10 
      and (i[1] between 0 and 255 )
      and (i[2] between 0 and 255 )
      and (i[3] between 0 and 255 );

在 python 中,您可以应用更优雅的解决方案并像这样检查网络掩码/前缀:checking-if-ipv4-address-in-network-python


推荐阅读