如何在 Hive 中使用正则表达式来提取第二个整数?
How to use regular expression in Hive to extract the second integer?
数据:
BUY 2 FOR 5(STORES)
BUY 2 FOR 10(STORES)
我尝试了什么:
regexp_extract(DATA, '.*? (\d+) .*$', 2)
想要的结果:
5
10
像这样:
regexp_extract(DATA, '^[^0-9]+?\d+[^0-9]+?(\d+)', 1);
或
regexp_extract(DATA, '^\D+?\d+\D+?(\d+)', 1);
正则表示:一个或多个非数字开头,一个或多个数字,一个或多个非数字,最后是捕获的数字组,需要提取组号1。
另一种解决方案是用非数字分割字符串并取第二个元素:
select split(DATA, '[^0-9]+')[2];
或者更简单:
select split(DATA, '\D+')[2]; --\D+ means one or more non-digits
数据:
BUY 2 FOR 5(STORES)
BUY 2 FOR 10(STORES)
我尝试了什么:
regexp_extract(DATA, '.*? (\d+) .*$', 2)
想要的结果:
5
10
像这样:
regexp_extract(DATA, '^[^0-9]+?\d+[^0-9]+?(\d+)', 1);
或
regexp_extract(DATA, '^\D+?\d+\D+?(\d+)', 1);
正则表示:一个或多个非数字开头,一个或多个数字,一个或多个非数字,最后是捕获的数字组,需要提取组号1。
另一种解决方案是用非数字分割字符串并取第二个元素:
select split(DATA, '[^0-9]+')[2];
或者更简单:
select split(DATA, '\D+')[2]; --\D+ means one or more non-digits