我的用例如下:
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命令也不起作用。
应如何修改正则表达式才能起作用?
答案 0 :(得分:0)
分隔符不能是数据中可能存在的字符。由于您可以控制它,因此可以使用管道'|
'或波浪号'~
'。只有您才能通过分析数据得出正确的字符。
如果您不能这样做,则需要在包含定界符的数据周围加上引号,并提出一种解决方法。