Hive 中字符串的正则表达式前导零
Regex leading zeros from string in Hive
我在 Hive
中有一个 19 字符的字符串,我需要拆分并删除所有前导零。
示例:
7212092180052740029
我需要这样拆分
721 20 9218 00527 40029
因此第一、第二或第三部分中没有前导零,并且 00
将从第四部分中删除;第 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
);如果是这样,那么我的 'solution' 将不起作用,因为 所有 零将是前导零,而 '^0*
将 return 没有。
^0*|(?<=^.{3})0*|(?<=^.{5})0*|(?<=^.{9})0*|(?<=^.{14}).*$
您可以使用此正则表达式并替换为 empty string
。查看演示。
我在 Hive
中有一个 19 字符的字符串,我需要拆分并删除所有前导零。
示例:
7212092180052740029
我需要这样拆分
721 20 9218 00527 40029
因此第一、第二或第三部分中没有前导零,并且 00
将从第四部分中删除;第 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
);如果是这样,那么我的 'solution' 将不起作用,因为 所有 零将是前导零,而 '^0*
将 return 没有。
^0*|(?<=^.{3})0*|(?<=^.{5})0*|(?<=^.{9})0*|(?<=^.{14}).*$
您可以使用此正则表达式并替换为 empty string
。查看演示。