在配置单元上第 n 次出现分隔符之前获取所有内容

Get everything before nth occurrence of delimiter on hive

我已经搜索了很多正则表达式匹配器,我有这样的字符串:

KRW3TR.899877.GR0054656*DR.798012...2..............GR0054656*EUR*

我已经用这个提取了,但是失败了。 REGEXP_EXTRACT(acolumn,'^([^\.]+)\.?',2)

我想要的是 KRW3TR.899877

如何正则表达式提取/trim/正则表达式替换这个?

任何 help/ideas 将不胜感激。谢谢。

您可以使用 substring_index,其中 returns 给定分隔符 (.) 的给定出现次数 (2) 之前的子字符串:

SELECT substring_index(
    'KRW3TR.899877.GR0054656*DR.798012...2..............GR0054656*EUR*', 
    '.',
    2
);

使用正则表达式:

select regexp_extract('KRW3TR.899877.GR0054656*DR.798012...2..............GR0054656*EUR*',
                      '^([^.]*\.[^.]*)' 
                      ,1) --extract group number 1

正则表达式含义:

        ^ - beginning of the string anchor
        [^.]* - not a dot 0 or more times
        \. - dot
        [^.]* - not a dot 0 or more times

结果:

KRW3TR.899877