2017-02-08 65 views
1

我想在蜂巢一個表達式解析出負的十進制值,我寫了下面的正則表達式,處理在正則表達式的多個匹配在蜂巢

select regexp_extract("abcsdfghj-117.3700631&poikse-118.244&", 
'([-][1-9][0-9]*[.][0-9]+)&*') as output 

雖然正則表達式似乎運作良好,它只是給了我它的第一場比賽。是否有可能讓蜂房給出所有可能的組合?蜂巢中是否有任何功能可以讓所有比賽恢復?

我沒有谷歌這一點,我無法找到任何答案。任何幫助,將理解

由於

+0

'regexp_extract'需要3個參數。 '(string,pattern,match_index)' –

+0

@ cricket_007我已經試過這個。我有0和1,我越來越-117.3700631和2,它拋出和錯誤。我只是想知道如果我們可以寫一個查詢來獲得輸出,如-117.3700631,-118.244。你能幫我做這件事嗎? – Observer

+0

我敢打賭,你必須編寫一個UDF來獲得「所有匹配」作爲你想要的列表。這裏是正確的正則表達式。 https://regex101.com/r/KgTsAl/1 –

回答

2
  1. 替換每{prefix}{number}&,{number}
  2. 切割的結果從所述第二炭(除去第一,
  3. 通過,
結果分割到陣列
hive> select split(substr(regexp_replace("abcsdfghj-117.3700631&poikse-118.244&",'.*?(-\\d+\\.\\d+)&',',$1'),2),',') as output; 
OK 
["-117.3700631","-118.244"] 
+0

是的,好吧,我喜歡Java/Python UDF的比正則表達式:) –