【问题标题】:Hive split string to get all the items except last oneHive 拆分字符串以获取除最后一项之外的所有项目
【发布时间】:2021-11-17 08:23:16
【问题描述】:

为什么当字符串被句号 (.) 分割时,下面的解决方案不起作用。

select regexp_extract('test,data,fd,dfd','^(.*?)(?:,)(.*)$', 2) from tablename;

input :     193.54.23.456
out put :   193.54.23

【问题讨论】:

  • 该解决方案适用于 , 分隔的字符串,但不适用于 .分开的项目。
  • 您当前的转换也无法按照您的描述进行。您正在提取的第 2 组应该是数据、fd、dfd。第 1 组 = 测试。

标签: hadoop hive impala


【解决方案1】:

如果您需要提取逗号或点分隔字符串的所有元素,请使用此 '^(.*?)(?:[.,])([^,.]*)$' 正则表达式并提取组号 1。

正则表达式含义:

^ - 字符串锚的开始

(.*?) - 组号 1,任何时候不贪心的任何字符,该组将捕获您需要提取的内容

(?:[.,]) - 点或逗号,此组未为提取编制索引,因为它未捕获组(?:表示未捕获)

([^,.]*?) --capturing group number 2 - 除了点和逗号之外的任何字符。该组的索引为 2,将捕获最后一个元素,如有必要,可以使用索引 2 提取。

演示:

--separated by dot
regexp_extract('test.data.fd.dfd','^(.*?)(?:[.,])([^,.]*)$', 1) --returns test.data.fd
regexp_extract('test.data.fd.dfd','^(.*?)(?:[.,])([^,.]*)$', 2) --returns dfd

--the same regex with comma separated
regexp_extract('test,data,fd,dfd','^(.*?)(?:[.,])([^,.]*)$', 1) --returns test.data.fd
regexp_extract('test,data,fd,dfd','^(.*?)(?:[.,])([^,.]*)$', 2) --returns dfd

在字符类 [] 中,您不需要转义点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 2019-03-11
    • 2016-01-18
    • 1970-01-01
    • 2015-07-30
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多