2015-11-02 317 views
1

这可能是一个愚蠢的问题,但我似乎无法克服这个自己 -HiveQL - 提取字符串的结尾相匹配的模式正则表达式

我有串的领域,这与某个时候结束3个数字由逗号分隔,例如

- 2353535.123213.124 - data.2354234.1324.1314 - data.old-24234.2341.4325

有时不是

- aaaa.53535 - data.old-3521 - data.AFG34fsaf34

每当发生第一种情况时,我需要从字符串的末尾提取3数字模式。含义:

- 2353535.123213.124 -> 2353535.123213.124 - data.2354234.1324.1314 -> 2354234.1324.1314 - data.old-24234.2341.4325 -> 24234.2341.4325 - aaaa.53535 -> Do nothing

这可能吗? 如果不是通过hiveQL(尽管这是可取的),即使是一个java正则表达式提取也是有用的(在自定义UDF中使用)。

回答

0
\\d+(?:\\.\\d+){2}$ 

您可以使用此java表达式。 See demo

+0

谢谢!虽然在演示中看起来不错,但我没有在Hive中使用它:“select regexp_extract('a.b-983475.9900291.556901','\\ d +(?:\\。\\ d +){2} $');生成 FAILED:SemanticException [Error 10014]:Line 1:7错误的参数''\\ d +(?:\\。\\ d +){2} $'':org.apache.hadoop.hive.ql.metadata。 HiveException:无法执行方法public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String)on object ... – KeshetE

+0

@KeshetE你可能需要'regexp_extract('ab-983475.9900291.556901','\\ d +(?:\\。\\ d +){2} $',0)' – vks

+0

没错!谢谢! – KeshetE