【问题标题】:Hive regexp_replaceHive regexp_replace
【发布时间】:2020-02-15 18:29:14
【问题描述】:

我的用例如下:

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

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

应该如何修改正则表达式才能工作?

【问题讨论】:

    标签: regex hive hiveql regexp-replace


    【解决方案1】:

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

    如果你不能这样做,那么你需要在包含分隔符的数据周围加上引号,并想出一种方法来处理它。

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 1970-01-01
      • 2020-04-11
      • 2019-06-28
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      相关资源
      最近更新 更多