Hive regexp_replace - PullRequest
       23

Hive regexp_replace

0 голосов
/ 18 октября 2019

Мой вариант использования следующий:

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,,...

, но также и в этом случае, если есть одно ":" илиСимвол «,» в строке (в тексте или в сообщении) команда замены не работает.

Как следует изменить регулярное выражение для работы?

1 Ответ

0 голосов
/ 18 октября 2019

Разделителями не могут быть символы, которые могут быть в данных. Так как у вас есть контроль над этим, используйте трубы '|' или тильды '~'. Только вы можете придумать правильные символы, проанализировав данные.

Если вы не можете этого сделать, то вам нужно заключить в кавычки данные, содержащие символ-разделитель, и найти способиметь дело с этим.

...