[英]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/routers
或application/motorola products/
。
select split('application/motorola products/routers','/')[size(split('application/motorola products/routers','/'))-1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.