Impala Regex:匹配字符 a 和 b 之间的字符串(如果 b 存在)

Posted

技术标签:

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

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

test@mytest.***.com -> 返回 mytest test@mytest -> 返回 mytest

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

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

【问题讨论】:

【参考方案1】:

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

@([^.]*)[.]?

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

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

Demo

【讨论】:

这可行,但它不适用于 Impala。我认为 Impala 对正则表达式有一些奇怪的限制。 @DavidZ 是的,我注意到 Impala 正则表达式。我会留下这个答案,以防它可以帮助其他人找到正确的答案。

以上是关于Impala Regex:匹配字符 a 和 b 之间的字符串(如果 b 存在)的主要内容,如果未能解决你的问题,请参考以下文章

Python regex - 匹配仅包含 A、B 或 C 的单词

正则表达式之Regex.Match()用法

正则表达式 regex

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

Regex 常见语法

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式