我在 Apache Hive 中遇到了一段代码,例如 regexp_extract(input, '[0-9]*', 0),有人可以向我解释一下这段代码的作用吗?谢谢
问问题
49953 次
3 回答
21
从Hive 手册 DDL中,它返回使用模式提取的字符串。例如regexp_extract('foothebar', 'foo(.*?)(bar)', 2)
返回bar
。
index
参数是捕获组,它是一个整数,可以取以下值:
- 0:整个比赛,在我的例子中是
foothebar
- 1:第一组,在我的例子中是
the
- 2:第二组 在我的例子中是
bar
- n:第n组。如果 n 大于您的正则表达式中定义的实际组数,您的 Hive 查询将失败。
在您的示例中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)
-> 返回空字符串
于 2013-01-17T03:41:59.917 回答
3
上面的答案部分不正确。regexp_extract('test911', '[0-9]*', 0)
肯定会返回 911。我们之前从未指定字符串的开头[0-9]*
于 2013-07-01T18:02:06.067 回答
-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)
上面的正则表达式说,列出字符串中开始的所有数字并忽略其余数字。
于 2019-10-24T06:27:29.380 回答