【问题标题】:Hive query to get the value for a given key in StringHive 查询以获取字符串中给定键的值
【发布时间】:2021-06-22 11:32:23
【问题描述】:

我正在使用 regexp_extract 从字符串中获取子字符串

我的字符串是“:abd: 576892034 :erg: 94856023MXCI :oute: A RF WERS YUT :oowpo: 649217349GBT GB”

如何使用 regexp_extract 函数得到这个。

如果我将密钥传递为 abd,我需要值为 576892034 任何其他功能也可以。

【问题讨论】:

    标签: sql hive impala


    【解决方案1】:
    select
      regexp_extract(
        ':adb: 576892034 :erg: 94856023MXCI :oute: A RF WERS YUT :oowpo: 649217349GBT GB',
        ':oute: ((?:.(?!:))+)',
        1
      )
    

    手册:cloudera docs

    正则表达式示例:regex101

    【讨论】:

    • 谢谢。你能告诉我它会做什么(只是我想理解这个的意思)......([^ ]+)
    • () 标记一个组。在这种情况下,它是第一个(也是唯一的)组,这就是为什么 regexp_extract 的第三个参数中的1 (使用组以便您可以指定要提取的匹配模式的哪一部分) [^ ] 表示“任何不是空格的字符”。 + 表示“至少出现一次,但与找到的一样多”。如果您仍然不清楚,SO 是错误的地方,您需要阅读正则表达式教程。
    • 感谢您的解释。
    • 它工作正常,但对于这个键 :oute: 我需要这个值--> A RF WERS YUT
    • 那么你需要匹配除了冒号之外的任何字符... . = 任何东西 (?!:) = 后面没有冒号。 => ((.(?!:))+) 我已经更新了答案,还有 regex101 演示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多