2017-01-18 21 views
1

我有以下table1與屬性co如何使用黑斑羚regex_extract法正則表達式或運算,並得到不同的捕獲組

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

的情況下有引號 - 我想獲得的第一次出現的內容。如果沒有引號,我想按原樣返回內容。 對於上面的例子: 對於第一線 - This one 對於第二行 - Just This 我在帕拉SQL代碼,解決了第一種情況:

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

我怎麼可以概括它來檢測並返回下一個案例需要的結果?

+0

我想你可以在sql中使用'COALESCE'或'IF()'來返回空洞字符串,如果不匹配的話。 –

+0

SQL不是執行此操作的最佳工具。你是如何在Impala內部清理這些數據的? –

+0

數據已經在黑斑羚中。我想使用REGEX功能,而不是上述的SQL功能,因爲它更高效。我認爲解決方案可以在REGEX中使用OR表達式,如下所示:http://stackoverflow.com/questions/8020848/and-or-operator-in-regular-expression – Avi

回答

1

你不能在黑斑羚中概括它。至於你有這個問題需要OR |在你的正則表達式中實現。使用regex_extract你需要把捕獲組號碼。到底 。例如

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

但隨着|在正則表達式中,對於這兩種情況,捕獲組必須有所不同。你不能在你的regex_extract方法中定義它。

說如果(A) | (B)是您的正則表達式然後爲您的第一個案例捕獲組將爲併爲您的第二個案例捕獲組將爲。但是,您無法將1和2都置於regex_extract語法中。

的通用正則表達式的語法是(我猜不會在因帕拉分組工作):

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

Watch out the capture groupings

在鏈接,你會看到「這一個」被捕獲作爲組2 其中僅此被捕獲爲組1

0

使用聯合檢查此項。

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

這不是正則表達式OR,不是嗎? –

相關問題