基于逗号分裂忽略逗号内部逗号的正则表达式

时间:2013-07-30 05:59:36

标签: java regex string

在我的一个项目中,我不得不处理逗号分隔文件(CSV)。我不得不根据逗号,忽略引号内的逗号(即"")来拆分数据,所以我使用了另一个堆栈溢出问题(Java: splitting a comma-separated string but ignoring commas in quotes)中提到的表达式。一切都工作正常,直到最近我注意到它不适用于下面提到的一个特定场景。

我有一个数据字符串需要在Commas上拆分为:

20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,

基于表达的理解

String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");

拆分后的数据应该返回一个大小为10的数组,其中包含一个空字符串的数组的最后两个索引,而是我得到一个大小为8的数组,最后两个逗号不被视为拆分器。我在我的应用程序中的几个地方使用过这个表达式,所以我不想从此回溯。任何帮助,将不胜感激。感谢

1 个答案:

答案 0 :(得分:2)

您需要使用split(java.lang.String, int) 方法

您的代码将如下所示:

String str = "20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,";
String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);