嗨,我是蜂巢新手,我正在使用regexp_extract从字符串中获取子字符串
my string is '/abc/def/ghi/'
如何使用regexp_extract函数获取abc或def或ghi
答案 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)