2013-01-21 126 views
0

我有一個csv文件,我想使用String split()方法。我希望split()返回的數組中的每個元素都是csv中的逗號分隔值。但是,在csv文件中還有其他逗號。Java正則表達式轉義逗號

幸運的是,這些逗號逃脫像'\,'

我無法得到正確的正則表達式的方法split()。我想通過不以轉義字符開頭的逗號分割。

我當前的代碼是:

String[] columns = new String[CONST]; 
columns = someString.split("*^\\,*"); 

對我來說這說:分裂一個逗號,但逗號之前的字符不能是轉義字符。允許逗號前後的任意數量的字符。

  1. 如何獲得正確的正則表達式?
+0

你爲什麼寫'=新的String [CONST]',只能更換它隨即? – SLaks

+1

另外,'CONST'是一個_extremely_差的變量名;它沒有給出變量代表的內容。 – SLaks

+3

[opencsv](http://opencsv.sourceforge.net/)是一個非常簡單的用於Java的csv(逗號分隔值)分析器庫。可配置的分隔符和引號字符(或使用合理的默認值) –

回答

1

首先,逗號沒有在您所使用的位置特殊的意義,因此可以省略逃生

在你的正則表達式的最大問題是,*本身並沒有給你任何意義。 *表示以前令牌的任何發生。

所以,正則表達式應該是String.split()

.*,.*(我想逃避逗號仍應罰款.*\,.*

然後,來使用,你使用正則表達式。 String.split()期望用於分隔符的正則表達式。因此,您應該只將,作爲正則表達式。有.*,.*作爲「分隔符」會給你意想不到的結果(你可以試試看)。

+0

這將炸彈整個字符串與split分開使用。 – nhahtdh

+1

我只談論他的正則表達式的有效性,並沒有注意他在哪裏使用它(分裂)。爲了在split()中使用,只需一個逗號就可以工作 –

0

因爲我打在搜索這個頁面,我會回答這個問題的陳述,並把正確的模式(和完整性):

columns = someString.split("[^\\\\],"); 

請注意,您需要4個轉義字符,因爲你需要2逃生字符在字符串中創建1個轉義字符。換句話說,「\\」創建字符串\。所以「\\\\」會創建字符串\\,它將正則表達式中的轉義轉義爲在正則表達式中創建char \。因此,您需要在字符串中使用4個轉義字符才能在正則表達式中創建一個字符。方括號和克拉是製作不聲明的一種方法(專門針對單個字符)。

您還可以圍繞不希望用引號分割的CSV條目。然後使用以下解決方案:Java: splitting a comma-separated string but ignoring commas in quotes

我個人的偏好是使用劈了過來第三方解析器,因爲環境中的我的代碼。