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

在配置单元中提取REGEXP\u以获取字符串的子字符串,regex,hive,hiveql,Regex,Hive,Hiveql,嗨,我是新来的,我正在使用regexp\u extract从字符串中获取子字符串 my string is '/abc/def/ghi/' 如何使用regexp_提取功能获取abc、def或ghi我们可以使用regexp_提取,方法是提供一个带有捕获组的模式,目标是我们想要匹配的内容。然后,我们可以指定哪个组作为替换 例如,要查找第二个和第三个路径分隔符之间的内容,我们可以尝试: regexp_extract('/abc/def/ghi/', '/[^/]+/([^/]+).*', 1) 注

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

my string is '/abc/def/ghi/'
如何使用regexp_提取功能获取abc、def或ghi我们可以使用regexp_提取,方法是提供一个带有捕获组的模式,目标是我们想要匹配的内容。然后,我们可以指定哪个组作为替换

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

regexp_extract('/abc/def/ghi/', '/[^/]+/([^/]+).*', 1)
注意:以上内容未经测试,如果需要跳出正斜杠,可能会出现错误。在这种情况下,请使用以下方法:

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

下面是问题

   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)

删除前导和尾随“/”并使用拆分来获取数组。也在使用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)

您好,我已经在oracle中创建了一个正则表达式,即REGEXP_SUBSTR'/abc/def/ghi/','[^/]*/',1,2用于获取abc,对于def REGEXP_SUBSTR'/abc/def/ghi/','[^/]*/',1,3用于ghi REGEXP_SUBSTR'/abc/def/ghi/',[^/]*/',1,4我想在hive中使用相同的东西…我不想更改我的模式,请您解释一下您的正则表达式,我将非常感谢。对不起,您当前的模式可能无法在hive中使用regexp\u extract。在你投票放弃之前,你应该试试我的答案。是的,我试过了,它回来了。对于获得abc和ghi,将使用不同的模式,对吗?你能解释一下这个regexp\u摘录“/abc/def/ghi”吗?“\/[^\/]+\/[^\/]+.*”,它会帮助我理解它。谢谢如果字符不是单词字符怎么办?先生-已更新查询以包括数字、字母数字和特殊字符,我们可以根据需要在[]中添加额外的特殊字符,或者更好地使用[^\/]来匹配任何非路径分隔符字符。你的答案对我有用。谢谢你的帮助