嗨,我是新来的配置单元,我正在使用regexp\u extract从字符串中获取子字符串
my string is '/abc/def/ghi/'
如何使用regexp\u提取函数获取、def或ghi
nhhxz33t1#
我们可以用 regexp_extract 通过提供一个模式,捕获组以我们想要匹配的对象为目标。然后,我们可以指定哪个组应该作为替换。例如,要查找第二个和第三个路径分隔符之间的内容,我们可以尝试:
regexp_extract
regexp_extract('/abc/def/ghi/', '/[^/]+/([^/]+).*', 1)
注:以上是未经测试,可能会给出错误,如果有必要转义正斜杠。在这种情况下,请使用以下命令:
regexp_extract('/abc/def/ghi/', '\/[^\/]+\/([^\/]+).*', 1)
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)
xurqigkl3#
删除前导和尾随 '/' 使用 split() 获取数组。split()还使用regexp:
'/'
split()
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)
3条答案
按热度按时间nhhxz33t1#
我们可以用
regexp_extract
通过提供一个模式,捕获组以我们想要匹配的对象为目标。然后,我们可以指定哪个组应该作为替换。例如,要查找第二个和第三个路径分隔符之间的内容,我们可以尝试:
注:以上是未经测试,可能会给出错误,如果有必要转义正斜杠。在这种情况下,请使用以下命令:
bnlyeluc2#
下面是问题。
xurqigkl3#
删除前导和尾随
'/'
使用split()
获取数组。split()还使用regexp:或在子查询中: