我有一张表格如下:
bl.ah
foo.bar
bar.fight
我想使用HiveQL的regexp_extract
返回
bl
foo
bar
答案 0 :(得分:2)
给出关于 regexp_extract 的docs数据:
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。
因此,如果您有一个包含单个列的表(我们将其称为description
示例),您应该能够按照以下方式使用regexp_extract在之前获取数据 ,如果存在,或者在没有句号的情况下整个字符串:
regexp_extract(description,'^([^\.]+)\.?',1)
正则表达式的组件如下:
^
字符串开头([^\.]+)
在捕获组中的任何非句号字符一次或多次\.?
一段时间或无时间因为我们感兴趣的字符串部分将位于第一个(也是唯一的)捕获组中,我们通过将index
参数传递给 1 来引用它