我在Apache Hive中遇到了一段代码,如regexp_extract(输入,'[0-9] *',0),有人可以向我解释这段代码的作用吗?感谢
答案 0 :(得分:19)
从the Hive manual DDL开始,它返回使用模式提取的字符串。例如regexp_extract('foothebar', 'foo(.*?)(bar)', 2)
会返回bar
。
index
参数是捕获组,它是一个可以采用以下值的整数:
foothebar
the
bar
在您的示例regexp_extract(input, '[0-9]*', 0)
中,您正在查找由input
标识的列的整个匹配项,并以数值开头。
以下是一些例子:
regexp_extract('9eleven', '[0-9]*', 0)
- >返回9
regexp_extract('9eleven', '[0-9]*', 1)
- >查询失败regexp_extract('911test', '[0-9]*', 0)
- >返回911
regexp_extract('911test', '[0-9]*', 1)
- >查询失败regexp_extract('eleven', '[0-9]*', 0)
- >返回空字符串regexp_extract('test911', '[0-9]*', 0)
- >返回空字符串答案 1 :(得分:3)
以上答案部分不正确。 regexp_extract('test911', '[0-9]*', 0)
肯定会返回911.我们从不在[0-9]*
答案 2 :(得分:-1)
正则表达式regexp_extract(input, '[0-9]*', 0)
将给出输入字符串中的所有起始数字。
例如
select regexp_extract('442323test41234', '[0-9]*', 0) ==> 442323
select regexp_extract('44test41234', '[0-9]*', 0) ==> 44
select regexp_extract('test41234', '[0-9]*', 0) ==> 1
但这不是提取起始数字的最佳方法。以下是更具可读性的格式:
select regexp_extract(input, '^([0-9]+).*?$', 1)
上面的正则表达式说,列出字符串中所有开头的数字,而忽略其余的数字。