首页 > 解决方案 > 从 Hive 中的字符串字段中提取多次出现的某些字符后的数字

问题描述

我正在尝试提取出现在 '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

谢谢!

标签: regexhiveqlregexp-replace

解决方案


采用

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

替换为 $1

请参阅正则表达式证明

解释

--------------------------------------------------------------------------------
  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

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


推荐阅读