regexp\u在配置单元中提取以获取字符串的子字符串

a1o7rhls  于 2021-06-27  发布在  Hive
关注(0)|答案(3)|浏览(301)

嗨,我是新来的配置单元,我正在使用regexp\u extract从字符串中获取子字符串

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

如何使用regexp\u提取函数获取、def或ghi

nhhxz33t

nhhxz33t1#

我们可以用 regexp_extract 通过提供一个模式,捕获组以我们想要匹配的对象为目标。然后,我们可以指定哪个组应该作为替换。
例如,要查找第二个和第三个路径分隔符之间的内容,我们可以尝试:

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

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

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

bnlyeluc2#

下面是问题。

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)
xurqigkl

xurqigkl3#

删除前导和尾随 '/' 使用 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)

相关问题