蜂巢regexp_replace

时间:2019-10-18 18:18:19

标签: regex hive hiveql regexp-replace

我的用例如下:

String text_string: "text1:message1,text3:message3,text2:message,..."

select regexp_replace(text_string, '[^:]*:([^,]*(,|$))', '$1')

Correct output: message1,message3,message2,...

该模式有效,但是问题在于,如果消息中包含字符“:”或“,”,替换将不起作用。

所以我尝试使用“ ::”和“,”字符作为字符串中的分隔符

String text_string: "text1::message1,,text3::message3,,text2::message2,..."

select regexp_replace(text_string, '[^::]*::([^,,]*(,,|$))', '$1')

Correct output: message1,,message3,,message2,,...

但在这种情况下,如果字符串(在文本或消息中)中有一个“:”或“,”字符,则replace命令也不起作用。

应如何修改正则表达式才能起作用?

1 个答案:

答案 0 :(得分:0)

分隔符不能是数据中可能存在的字符。由于您可以控制它,因此可以使用管道'|'或波浪号'~'。只有您才能通过分析数据得出正确的字符。

如果您不能这样做,则需要在包含定界符的数据周围加上引号,并提出一种解决方法。