使用Hive中的REGEXP_EXTRACT从带有美元符号的字符串中提取2个价格

时间:2018-03-16 23:31:05

标签: regex hive

我正在努力在Hive中使用REGEXP_EXTRACT从字符串中提取2个浮点数。我只想要浮点数而不是$符号。

输入字符串:value=$110.60-$79.30,

预期结果:110.6079.30

我尝试了所有这些变量,但结果是空的。

(str,'value=$$([0-9]* \ .[0-9]*)\ -$$([0-9]* \ .[0-9]*)', 1)

(str,'value=\$([0-9]* \ .[0-9]*)\ -\$([0-9]* \ .[0-9]*)', 1) 

(str,'value=(. * ?)-(. * ?)', 2)

如果我制作了一个冗长的子查询并使用SUBSTR,我可以摆脱$符号,但仍然没有返回第二个值($79.30

问题

RegEx将从此输入中获得所需的输出?

1 个答案:

答案 0 :(得分:0)

应该有帮助

regexp_extract(string `[$]([0-9]+[.][0-9]+)-$([0-9]+[.][0-9]+)`, 1)
regexp_extract(string `[$]([0-9]+[.][0-9]+)-$([0-9]+[.][0-9]+)`, 2)

它匹配一个后跟美元符号的数字,并将数字保留在第一个使用1引用的捕获组中。然后您可以使用2进行另一个匹配。

  

regexp_extract(string subject, string pattern, int index)

     

返回使用模式提取的字符串。例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)返回'bar.'请注意,在使用预定义的字符类时需要注意:使用'\s'作为第二个参数将匹配字母s; '\\s'是匹配空格等的必要条件。 'index'参数是Java regex Matcher group()方法索引。有关'index'或Java regex group()方法的更多信息,请参阅docs/api/java/util/regex/Matcher.html

Docs