HIVE - 删除某些字符之间的所有内容
HIVE - Removing everything between certain characters
我有一些路径作为字符串,我想清理并使其更整洁。
字符串示例:
字符串 1:/keywordOneA/keywordTwoA/393r-mr49-j5n65_9e8e77g77b8
字符串 2:/keywordOneA/keywordTwoA/111-4444-jjjj_1b1b1b1b1b1b1b
字符串 3:/keywordOneA/keywordTwoB/393r-mr49-j5n65_9e8e77g77b8/keywordThreeA
我希望他们屈服:
字符串 1:/keywordOneA/keywordTwoA/
字符串 2:/keywordOneA/keywordTwoA/
字符串 3:/keywordOneA/keywordTwoB/keywordThreeA
基本上只要是 /
.../
之间的字母,那么我想保留这些关键字,否则我想删除它们。这有可能吗?
也可以使用 WITH
子句逐步执行此操作。
这是我想到的,但开始卡住了
select regexp_replace('/keywordonea/keywordtwob/393r-mr49 j5n65_9e8e77g77b8/keywordthreea','[0-9\/_.,!?-]','');
我认为这会满足您的要求:
select regexp_replace(val, '/[^/]*[^a-zA-Z0-9/][^/]*', '')
我手头没有 Hive,但是 this works in Oracle。
此正则表达式正在查找正斜杠后的字符。这些字符不是正斜杠,并且至少有一个必须是非字母数字的。因为正则表达式默认是贪婪的,所以这会将字符匹配到下一个正斜杠或字符串的末尾。
我有一些路径作为字符串,我想清理并使其更整洁。
字符串示例:
字符串 1:/keywordOneA/keywordTwoA/393r-mr49-j5n65_9e8e77g77b8
字符串 2:/keywordOneA/keywordTwoA/111-4444-jjjj_1b1b1b1b1b1b1b
字符串 3:/keywordOneA/keywordTwoB/393r-mr49-j5n65_9e8e77g77b8/keywordThreeA
我希望他们屈服:
字符串 1:/keywordOneA/keywordTwoA/
字符串 2:/keywordOneA/keywordTwoA/
字符串 3:/keywordOneA/keywordTwoB/keywordThreeA
基本上只要是 /
.../
之间的字母,那么我想保留这些关键字,否则我想删除它们。这有可能吗?
也可以使用 WITH
子句逐步执行此操作。
这是我想到的,但开始卡住了
select regexp_replace('/keywordonea/keywordtwob/393r-mr49 j5n65_9e8e77g77b8/keywordthreea','[0-9\/_.,!?-]','');
我认为这会满足您的要求:
select regexp_replace(val, '/[^/]*[^a-zA-Z0-9/][^/]*', '')
我手头没有 Hive,但是 this works in Oracle。
此正则表达式正在查找正斜杠后的字符。这些字符不是正斜杠,并且至少有一个必须是非字母数字的。因为正则表达式默认是贪婪的,所以这会将字符匹配到下一个正斜杠或字符串的末尾。