2011-12-22 65 views
0

我有數據進入由管道分隔的txt文件。不幸的是2個字段可以有多個值。爲了分開這些倍數,發送者再次使用了管道,但是引用了它。我正則表達式工作了幾個月,直到某些罕見的情況......目前在Java(Pig)Regex中,我怎麼能做到以下幾點?

正則表達式:

([^\|]*)\|"?([^"]*)"?\|([^\|]*)\|"?([^"]*)"? 

而且它的工作對下面的情況恰好大多數時間: ABC |「第1部分|第2部分」 | ABC |「工具1 | TOOL2」

但這種情況是([^"]*)跳躍前進,從空白通吃,以引號結束: ABC || ABC |「工具1 | TOOL2」

所以我意識到我必須記得下一個管道而不是報價時。 只是不知道如何............. P.S.對於那些可能在看這個的PIG人員,我從每個轉義中刪除了一個反斜槓,使它看起來更像Java,但在PIG中,你需要2個,fyi。

回答

0

在表達式中,您需要指定|之間的部分可以被引用或不引用。可以按如下方式做到這一點:

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

現在你可以多次使用| S IN之間重複這一部分,因爲你需要。

+0

感謝您的帖子axtavt,你非常接近。只是要擺脫一些paren的。 我的朋友幫我準確地得到了它: \ |( 「[^」] *「| [^ \ |] *)'code' – Justin 2011-12-22 19:23:48