【问题标题】:Impala Regex: Match String between character a and b (if b exists)Impala Regex:匹配字符 a 和 b 之间的字符串(如果 b 存在)
【发布时间】:2018-11-06 14:52:10
【问题描述】:

我正在尝试使用 Impala 编写一个正则表达式来匹配可能不存在第二个字符的两个字符之间的字符串。例如,我想匹配@ 字符和. 之间的所有内容(如果点运算符存在的话)。

  • test@mytest.stackoverflow.com -> 返回 mytest
  • test@mytest -> 返回 mytest

我编写了以下正则表达式并且它有效,但我认为它绝对可以以更简洁的方式编写。

regexp_extract(regexp_extract('test @ mytest.stackoverflow.com', '^([^.]*).*', 1), '@(.*?)', 1) ->mytest

【问题讨论】:

    标签: regex impala


    【解决方案1】:

    尝试使用以下模式,将要匹配的文本放在捕获组中:

    @([^.]*)[.]?
    
    SELECT
        REGEXP_EXTRACT('test @ mytest.stackoverflow.com', '@([^.]*)[.]?', 1) AS result
    FROM yourTable;
    

    这里是展示正则表达式的演示:

    Demo

    【讨论】:

    • 这可行,但它不适用于 Impala。我认为 Impala 对正则表达式有一些奇怪的限制。
    • @DavidZ 是的,我注意到 Impala 正则表达式。我会留下这个答案,以防它可以帮助其他人找到正确的答案。
    猜你喜欢
    • 2016-11-21
    • 2015-03-07
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多