配置单元中的REGEXP_EXTRACT获取字符串的子字符串

时间:2019-02-13 11:24:55

标签: hive hiveql

嗨,我是蜂巢新手,我正在使用regexp_extract从字符串中获取子字符串

my string is '/abc/def/ghi/'

如何使用regexp_extract函数获取abc或def或ghi

3 个答案:

答案 0 :(得分:1)

我们可以使用regexp_extract来提供一种模式,其中包含针对我们要匹配的捕获组。然后,我们可以指定应由哪个组代替。

例如,要查找第二和第三路径分隔符之间的内容,我们可以尝试:

regexp_extract('/abc/def/ghi/', '/[^/]+/([^/]+).*', 1)

注意:以上内容未经测试,如果有必要转义正斜杠,则可能会出错。在这种情况下,请使用以下命令:

regexp_extract('/abc/def/ghi/', '\/[^\/]+\/([^\/]+).*', 1)

答案 1 :(得分:1)

删除开头和结尾的'/',然后使用split()获得一个数组。 split()也在使用regexp:

hive> select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/')[0];

abc

hive> select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/')[1];

def

hive> select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/')[2];

ghi

或在子查询中:

hive> select array[0], array[1], array[2] 
      from (select split(regexp_replace('/abc/def/ghi/','^/|/$',''),'/') as array) s;
OK
_c0     _c1     _c2
abc     def     ghi
Time taken: 0.192 seconds, Fetched: 1 row(s)

答案 2 :(得分:0)

下面是查询。

   hive> select regexp_extract('/abc123./def456./ghi789/', '\/([\\w\\d.]*)\/([\\w\\d.]*)\/([\\w\\d.]*)',1);
OK
abc123.
Time taken: 0.103 seconds, Fetched: 1 row(s)
hive> select regexp_extract('/abc123./def456./ghi789/', '\/([\\w\\d.]*)\/([\\w\\d.]*)\/([\\w\\d.]*)',2);
OK
def456.
Time taken: 0.1 seconds, Fetched: 1 row(s)
hive> select regexp_extract('/abc123./def456./ghi789/', '\/([\\w\\d.]*)\/([\\w\\d.]*)\/([\\w\\d.]*)',3);
OK
ghi789
Time taken: 0.124 seconds, Fetched: 1 row(s)