配置单元regexp\u替换

fruv7luv  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(358)

我的用例如下:

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

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

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

模式可以工作,但问题是,如果消息中有字符“:”o“,,则替换不起作用。
所以我尝试在字符串中使用“:”和“,”字符作为分隔符

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

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

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

但在这种情况下,如果字符串(文本或消息中)中有一个“:”或“,”字符,则replace命令不起作用。
正则表达式应该如何修改才能工作?

vq8itlhq

vq8itlhq1#

分隔符不能是数据中可能包含的字符。既然你能控制它,就用管道 | '或颚化符' ~ “也许吧。只有你能通过分析数据得出正确的字符。
如果做不到这一点,则需要在包含分隔符的数据周围加引号,并想出一种处理方法。

相关问题