2012-11-29 60 views
2

我正在尋找一個java正則表達式,它將在excel單元格內跳過雙引號。用java中的RegEx解析CSV - 單元格內的轉義雙引號

我跟着這個例子,但需要正則表達式的另一個改變,以使其工作在一個單元格內轉義雙引號。

Parsing CSV input with a RegEx in java

private final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)"); 

實施例的數據:

「A,B」 「2」 大小」 「文本1,文本2,text3」 中

從上面的正則表達式失敗,在2"

我想要輸出如下。不要緊,如果外面的雙引號是否存在。

「A,B」
「2」 大小」
「文本1,文本2,文字3」

+0

那麼,你想要輸出是什麼? –

+0

爲什麼你會用RegEx解析csv?一旦你通過常規方式獲得了這些標記,我就可以看到在個別標記上使用RegEx,但用RegEx解析整個csv只是一個可怕的想法。如果我正在對此進行代碼審查,我會告訴你重寫整個事情。 – evanmcdonnal

+2

你爲什麼要用正則表達式來代替[OpenCSV](http://opencsv.sourceforge.net)? – jlordo

回答

0

雖然我同意,在使用正則表達式解析CVS是不是真的是最好的方式,稍微好一點模式是:。

Pattern pattern = Pattern.compile("^\"([^\"]*)\",|,\"([^\"]*)\",|,\"([^\"]*)\"$|(?<=,|^)([^,]*)(?=,|$)"); 

這隻會報價和逗號之後終止單元格值,或一個命令和一個報價之後啓動它

+0

感謝您的正則表達式。實際上,當csv在excel中打開並用修改後的數據保存時,圍繞單元格的雙引號就消失了。如果單元格中有逗號,則保留雙引號。所以,在這種情況下,我的數據變成了「A,B」,2「大小,」text1,text2,text3「,text4,text5,」text6,text7「(爲了更好理解,我增加了三列) – user1864665

+0

文本中的雙引號是什麼?這些是以任何方式逃脫的? – eppesuig

+0

不,一個單元格內的雙引號不會被溢出:( – user1864665

0

以及FJ評論的,所述輸入數據是不明確的,但爲你的示例輸入,你可以嘗試

  • string.split("\",\"")方法得到一個String[]。 在此之後,你有與3個元素的數組:
[ 
"A,B, 
2" size, 
text1,text2, text3" 
] 
  • 去除第一字符(它是雙引號)陣列的第一個元素的
  • 刪除最後一個字符(這是雙引號)的陣列的最後一個元素