HIVE - 删除某些字符之间的所有内容

时间:2018-02-05 16:22:41

标签: sql regex hive regexp-replace

我有一些路径作为字符串,我想清理并使它更整洁。

字符串示例:
字符串1:insert_zero <- function(smpl_vec){ return(smpl_vec[2]<-0) } my_df = data.frame('col_1'= c(1,2,3), 'col_2'= c(2,3,4)) apply(my_df, 2, insert_zero)
字符串2:/keywordOneA/keywordTwoA/393r-mr49-j5n65_9e8e77g77b8
字符串3:/keywordOneA/keywordTwoA/111-4444-jjjj_1b1b1b1b1b1b1b

我希望他们屈服:
字符串1:/keywordOneA/keywordTwoB/393r-mr49-j5n65_9e8e77g77b8/keywordThreeA
字符串2:/keywordOneA/keywordTwoA/
字符串3:/keywordOneA/keywordTwoA/

基本上只要它只是/keywordOneA/keywordTwoB/keywordThreeA ... /之间的字母然后我想保留这些关键字,否则我想删除它们。这有可能吗?

也可以使用/子句逐步执行此操作。

这就是我想出来的,但开始卡住了

WITH

1 个答案:

答案 0 :(得分:1)

我认为这会做你想做的事情:

select regexp_replace(val, '/[^/]*[^a-zA-Z0-9/][^/]*', '')

我手边没有Hive,但this works in Oracle

此正则表达式正在查找正斜杠后面的字符。这些字符不是正斜杠,并且至少一个必须是非字母数字。因为默认情况下正则表达式是贪婪的,所以这将匹配下一个正斜杠或字符串末尾的字符。