繁体   English   中英

regexp_extract 在 Hive 中查找值

[英]regexp_extract to find the value in Hive

我是regexp_extract ,需要在/上拆分列,然后选择第三个值。 例如,从

application/motorola products/routers 

想拿routers 如果没有第三个值,那么我们需要回退到第二个值,这将是motorola products 我尝试了以下正则表达式模式,但它不起作用:

(.*?\/)(.*?\/)(.*?)(\/.*\/)

您是说单个字符是可选的。 . 量词*+ 我认为这个正则表达式实际上会更好:

(?:([^\/]+?\/)([^\/]+?)\/([^\/]*)|([^\/]+?\/)([^\/]+))

演示: https : //regex101.com/r/dX6uQ9/2

我没有和/没有hive一起工作,所以不能确认这会起作用,但我认为它应该让你走得更近。

听起来您只想要最后一个值,即最后一个/之后的值。 正则表达式为[^/]+$

select regexp_extract(name, '[^/]+$', 0) from dummy;

如果有两个斜杠,您将获得第三个值。 如果有五个斜线,您将获得第六个值。

如果你想在第三个值处停止,即使有两个以上的斜杠,你可以使用这个:

select regexp_extract(name, '^(?:[^/]+/){0,2}([^/]+)', 1) from dummy;

索引参数1使其提取第一个捕获组([^/]+)匹配的内容。

注意:我假设完整的值不会以斜线开头结尾,例如/motorola products/routersapplication/motorola products/

select split('application/motorola products/routers','/')[size(split('application/motorola products/routers','/'))-1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM