基于逗号的拆分的正则表达式忽略引号内的逗号

Abd*_*man 2 java regex string

在我的一个项目中,我必须处理逗号分隔文件 (CSV)。我必须基于逗号分割数据,,忽略引号内的逗号(即""),因此我使用了另一个堆栈溢出问题中提到的表达式(Java:分割逗号分隔的字符串但忽略引号中的逗号)。一切都工作正常,直到最近我注意到它不适用于下面提到的一种特定场景。

我有一个数据字符串需要用逗号分割为:

20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,
Run Code Online (Sandbox Code Playgroud)

根据我的理解表达

String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*dis 6

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

您的代码将如下所示:

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