Regex 配置单元中字符串的正则表达式前导零

Regex 配置单元中字符串的正则表达式前导零,regex,hive,Regex,Hive,我在Hive中有一个19个字符的字符串,需要将其拆分并删除任何前导零 示例: 7212092180052740029 我需要像这样分开 721 20 9218 00527 40029 因此,在第1、第2或第3节中没有前导零,00将从第4节中删除;第5条将不予理会。我期望的结果是 721209218527 我的第一个解决方案是 trim(concat_ws('', regexp_replace(substr(some_string, 1, 3), '^0*', '')

我在
Hive
中有一个19个字符的字符串,需要将其拆分并删除任何前导零

示例

7212092180052740029
我需要像这样分开

721 20 9218 00527 40029
因此,在第1、第2或第3节中没有前导零,
00
将从第4节中删除;第5条将不予理会。我期望的结果是

721209218527
我的第一个解决方案是

trim(concat_ws('', regexp_replace(substr(some_string, 1, 3),  '^0*', '')
                 , regexp_replace(substr(some_string, 4, 2),  '^0*', '')
                 , regexp_replace(substr(some_string, 6, 4),  '^0*', '')
                 , regexp_replace(substr(some_string, 10, 5), '^0*', '')))
但这似乎有点过分了。有没有办法用一行正则表达式来实现这一点


此外,还应注意,在5个部分中的任何一个部分中,当分割时,将永远不会是全零(即,第一部分永远不会是
000
);如果是这样,那么我的“解决方案”就不起作用了,因为所有的零都是前导的1,
^0*
将不返回任何内容。

^0*|(?拆分的逻辑是什么?我想从这个问题中可以很明显地看出这一点。(3,2,4,5,5)我现在无法检查,但您是否尝试过不使用正则表达式?也许为了删除前导零,将拆分的字符串转换为int,然后再转换回string将对您有效,而且速度会更快。
^0*|(?<=^.{3})0*|(?<=^.{5})0*|(?<=^.{9})0*|(?<=^.{14}).*$