如何在 impala regex_extract 方法中使用正则表达式 OR 运算并获得不同的捕获组
How to use regex OR operation in impala regex_extract method and get different capture group
我有以下 table1
属性 co
:
|-----------------------------------------
| co
|-----------------------------------------
| fsdsdf "This one" fdsfsd ghjhgj "sfdsf"
| Just This
|-----------------------------------------
如果有引号 - 我想获取第一次出现的内容。如果没有引号,我想 return 内容保持原样。
对于上面的例子:
对于第一行 - This one
对于第二行 - Just This
我在 Impala 中有 SQL 代码解决了第一种情况:
select regexp_extract (co, '"([^"]*")',1) from table1
我如何概括它以检测并 return 下一个案例所需的结果?
你不能在impala中概括它。就您遇到的问题而言,它需要 OR |在你的正则表达式中实现。使用 regex_extract 您需要输入捕获组号。到底 。例如
select regexp_extract (co, '"([^"]*")',
1) from table1
但是有了 |正则表达式中的操作数,捕获组对于两种情况都必须不同。您不能在 regex_extract 方法中定义。
如果 (A)|(B) 是您的正则表达式,那么您的第一个案例捕获组将是 1 并且您的第二个案例捕获组将是 2 。但是你不能把 1 和 2 都放在你的 regex_extract 语法中。
通用正则表达式语法将是(我猜这在 impala 分组中不起作用):
^(?!.*")(.*)$|^[^"]*"(.*?)".*$
Watch out the capture groupings
在 link 中,您会看到 "This One" 被捕获为第 2 组
其中 Just this 被捕获为组 1
使用 union 检查这个。
select regexp_extract (co, '"([^"]*")',1) from table1
union
select co from table1 where co like '"%"'
您可以使用 if
函数并将 RegEx 函数放入其中作为参数。所以,
if(regexp_like(co,'"'),
regexp_extract(co,'"([^"]*)',1), co)
我有以下 table1
属性 co
:
|-----------------------------------------
| co
|-----------------------------------------
| fsdsdf "This one" fdsfsd ghjhgj "sfdsf"
| Just This
|-----------------------------------------
如果有引号 - 我想获取第一次出现的内容。如果没有引号,我想 return 内容保持原样。
对于上面的例子:
对于第一行 - This one
对于第二行 - Just This
我在 Impala 中有 SQL 代码解决了第一种情况:
select regexp_extract (co, '"([^"]*")',1) from table1
我如何概括它以检测并 return 下一个案例所需的结果?
你不能在impala中概括它。就您遇到的问题而言,它需要 OR |在你的正则表达式中实现。使用 regex_extract 您需要输入捕获组号。到底 。例如
select regexp_extract (co, '"([^"]*")',
1) from table1
但是有了 |正则表达式中的操作数,捕获组对于两种情况都必须不同。您不能在 regex_extract 方法中定义。
如果 (A)|(B) 是您的正则表达式,那么您的第一个案例捕获组将是 1 并且您的第二个案例捕获组将是 2 。但是你不能把 1 和 2 都放在你的 regex_extract 语法中。
通用正则表达式语法将是(我猜这在 impala 分组中不起作用):
^(?!.*")(.*)$|^[^"]*"(.*?)".*$
Watch out the capture groupings
在 link 中,您会看到 "This One" 被捕获为第 2 组 其中 Just this 被捕获为组 1
使用 union 检查这个。
select regexp_extract (co, '"([^"]*")',1) from table1
union
select co from table1 where co like '"%"'
您可以使用 if
函数并将 RegEx 函数放入其中作为参数。所以,
if(regexp_like(co,'"'),
regexp_extract(co,'"([^"]*)',1), co)