[英]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.