从 Hive 中的字符串字段中多次出现的某些字符后提取数字

时间:2021-06-23 20:56:30

标签: regex hiveql regexp-replace

我正在尝试提取出现在 'dd ->' 之后的所有数字

我已经想出了如何在 'dd ->' 之后提取第一次出现的数字:regexp_extract(string, 'dd\\s->\\s([0-9]+)') 以及如何替换除数字以外的所有字符 regexp_replace(string, '[^0-9]+', '') 但未能找到解决方案

字符串: (dd -> 2192, bar -> 1), (dd -> 2670, bar -> 1), (dd -> 2487, bar -> 3),(dd -> 2346, bar -> 3) kk=67457 ghyt=1628 nn=8.67.1

所需的输出: 2192 2670 2487 2346

谢谢!

1 个答案:

答案 0 :(得分:0)

使用

dd ->( [0-9]+)|.

替换为 $1

regex proof

说明

--------------------------------------------------------------------------------
  dd ->                    'dd ->'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
                             ' '
--------------------------------------------------------------------------------
    [0-9]+                   any character of: '0' to '9' (1 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
 |                        OR
--------------------------------------------------------------------------------
  .                        any character except \n

如果需要,修剪第一个空格。