Java正则表达式转义逗号

问题描述:

我有一个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(逗号分隔值)分析器库。可配置的分隔符和引号字符(或使用合理的默认值) –

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

在你的正则表达式的最大问题是,*本身并没有给你任何意义。 *表示以前令牌的任何发生。

所以,正则表达式应该是String.split()

.*,.*(我想逃避逗号仍应罚款.*\,.*

然后,来使用,你使用正则表达式。 String.split()期望用于分隔符的正则表达式。因此,您应该只将,作为正则表达式。有.*,.*作为“分隔符”会给你意想不到的结果(你可以试试看)。

+0

这将炸弹整个字符串与split分开使用。 – nhahtdh

+1

我只谈论他的正则表达式的有效性,并没有注意他在哪里使用它(分裂)。为了在split()中使用,只需一个逗号就可以工作 –

因为我打在搜索这个页面,我会回答这个问题的陈述,并把正确的模式(和完整性):

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

请注意,您需要4个转义字符,因为你需要2逃生字符在字符串中创建1个转义字符。换句话说,“\\”创建字符串\。所以“\\\\”会创建字符串\\,它将正则表达式中的转义转义为在正则表达式中创建char \。因此,您需要在字符串中使用4个转义字符才能在正则表达式中创建一个字符。方括号和克拉是制作不声明的一种方法(专门针对单个字符)。

您还可以围绕不希望用引号分割的CSV条目。然后使用以下解决方案:Java: splitting a comma-separated string but ignoring commas in quotes

我个人的偏好是使用劈了过来第三方解析器,因为环境中的我的代码。