正则表达式 - 用逗号分隔字符串(引号中的逗号除外)和换行符(\ n或\ r \ n)

时间:2017-02-01 21:47:08

标签: java regex

我目前正在另一篇文章中使用此正则表达式:

",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"

当我尝试拆分文本文件时,它对我来说非常有效。我需要用文本文件中的每个单独元素填充一个数组,用逗号(引号内的逗号除外)和任何类型的换行符(这是.txt文件)分隔。

以上正则表达式适用于逗号,如何修改它以适用于换行符?

编辑:对不起,以下是我要拆分的一些例子:

20120102,1,1374,2,"Santorum, Rick","Romney, Mitt"
20120102,1,1158,2,99,"Romney, Mitt"
20120102,1,1237,26,99,99
20120102,1,1839,3,99,"Pennington, Matthew"
20120102,1,1431,25,99,99
20120102,1,976,5,99,99
20120104,1,1508,2,99,99
20120104,1,1379,2,99,99

所以用逗号分隔的所有内容都是一个单独的元素。每个名称(用引号括起来)都是一个单独的元素(但不包含引号)。 \ n,\ r \ n和其他换行符不会被包含在内。所有这些元素都将附加到一个arraylist。我不知道正则表达式是否可行。

1 个答案:

答案 0 :(得分:0)

String[] arr="foo\nbar,\"fo,o\"\n\"bar\"".split("(\\r|\\n|,)(?=([^\"]*\"[^\"]*\")*[^\"]*$)")

这样的东西

使用for(String e:arr){arraylist.add(e.replaceAll("^\"|\"$", ""));}

添加到ArrayList

-

但我怀疑这个正则表达式在某些角落案件中被打破了。使用库应该比Regex更好。例如。 http://commons.apache.org/proper/commons-csv/