如何在impala regex\u extract方法中使用regex或operation并获得不同的捕获组

igsr9ssn  于 2021-06-26  发布在  Impala
关注(0)|答案(3)|浏览(413)

我有以下几点 table1 带属性 co :

|-----------------------------------------
| co
|-----------------------------------------
| fsdsdf "This one" fdsfsd ghjhgj "sfdsf"
| Just This 
|-----------------------------------------

如果有引号-我想得到第一次出现的内容。如果没有引号,我想返回的内容是一样的。对于上面的例子:对于第一行- This one 对于第二行- Just This 我在impala中有解决第一种情况的sql代码:

select regexp_extract (co, '"([^"]*")',1) from table1

如何对其进行概括以检测并返回下一个案例所需的结果?

bfrts1fy

bfrts1fy1#

你可以使用 if 函数,并将regex函数放入参数中。所以,

if(regexp_like(co,'"'),
   regexp_extract(co,'"([^"]*)',1), co)
zu0ti5jz

zu0ti5jz2#

用活接头检查。

select regexp_extract (co, '"([^"]*")',1) from table1
 union
 select co from table1 where co like '"%"'
t3irkdon

t3irkdon3#

你不能用 Impala 来概括它。就您遇到的问题而言,它需要或|在您的正则表达式中实现。使用regex\u extract,您需要将捕获组编号放在最后。例如 select regexp_extract (co, '"([^"]*")', 1 ) from table1 但是对于正则表达式中的|操作数,两种情况下的捕获组都必须不同。您不能在regex\u extract方法中定义。
假设(a)|(b)是regex,那么第一个case-capture组是1,第二个case-capture组是2。但到目前为止,您不能在regex\u extract语法中同时使用1和2。
一般的regex语法是(我猜这在impala分组中不起作用):

^(?!.*")(.*)$|^[^"]*"(.*?)".*$

注意抓捕组
在链接中,您将看到“this one”被捕获为第2组,而它也被捕获为第1组

相关问题