我需要Hive中的regex_extract
帮助。我有一个字符串列,我需要从中提取日期。样本数据如下
Abc def: 23-oct-17
Def:abc abc: 23-nov-2017
My data is: 17-nov-17
答案 0 :(得分:0)
以下正则表达式与字符串23-nov-2017
中的Abc def: 23-oct-17 Def:abc abc: 23-nov-2017
匹配
((3[01]|[12][0-9]|[1-9])-[a-zA-Z]{3,}-[0-9]{4,})
它也可以匹配例如3-oct-2018
。也就是说,它允许数字介于1-31之间,后跟“-”,三个字母的月份名称,另一个“-”和四个数字年份。
答案 1 :(得分:0)
split()函数也是基于正则表达式的,您可以按分号+一个或多个空格进行分割:
select
split(str,':\\s+')[1] date
from
(
select
stack(3,
'Abc def: 23-oct-17',
'Def:abc abc: 23-nov-2017',
'My data is: 17-nov-17'
) as str
)s
结果:
OK
23-oct-17
23-nov-2017
17-nov-17
Time taken: 0.063 seconds, Fetched: 3 row(s)
答案 2 :(得分:0)
由于数据是字符串的最后一部分,因此您可以在下面的查询中使用
hive> select regexp_extract('Def:abc abc: 23-nov-2017', '\\d*-\\w*-\\d*$', 0);
OK
23-nov-2017
在reg ex之上将使用模式DD-MON-YYYY匹配字符串的结尾