我正在努力在Hive中使用REGEXP_EXTRACT从字符串中提取2个浮点数。我只想要浮点数而不是$
符号。
输入字符串:value=$110.60-$79.30,
预期结果:110.60
和79.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将从此输入中获得所需的输出?
答案 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。