【问题标题】:Regex leading zeros from string in HiveHive中字符串的正则表达式前导零
【发布时间】:2023-03-23 19:21:01
【问题描述】:

我在 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);如果是这样,那么我的“解决方案”将不起作用,因为 all 零将是前导的,'^0* 将不返回任何内容。

【问题讨论】:

  • 拆分的逻辑是什么
  • 我认为从问题中可以看出这一点。 (3, 2, 4, 5, 5)
  • 我现在无法检查,但你试过不使用正则表达式吗?也许为了删除前导零,将拆分的字符串转换为 int 然后再转换回字符串对您有用并且会更快。

标签: regex hive


【解决方案1】:
^0*|(?<=^.{3})0*|(?<=^.{5})0*|(?<=^.{9})0*|(?<=^.{14}).*$

您可以使用此正则表达式并替换为empty string。参见演示。

https://regex101.com/r/rO0yD8/15

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多