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

Java 基于逗号的拆分的正则表达式忽略引号内的逗号,java,regex,string,Java,Regex,String,在我的一个项目中,我必须处理逗号分隔文件(CSV)。我不得不基于逗号,分割数据,忽略引号内的逗号(即“”),所以我使用了另一个堆栈溢出问题()中提到的表达式。直到最近,我才注意到它在下面提到的一个特定场景中不起作用 我有一个数据字符串需要用逗号拆分: 20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,, 在我的理解基础上的表达 String[] rowData = str.split(",(?=([^\"

在我的一个项目中,我必须处理逗号分隔文件(CSV)。我不得不基于逗号
分割数据,忽略引号内的逗号(即
“”
),所以我使用了另一个堆栈溢出问题()中提到的表达式。直到最近,我才注意到它在下面提到的一个特定场景中不起作用

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

20Y-62-27412,20Y6227412NK,BRACKET,101H,00D505060,H664374,06/25/2013,1,,
在我的理解基础上的表达

String[] rowData = str.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
拆分后的数据应该返回一个大小为10的数组,数组的最后两个索引包含一个空字符串,而我得到的是一个大小为8的数组,该数组的最后两个逗号不被视为拆分器。在我的应用程序中,我已经在几个地方使用了这个表达式,所以我不想从这个角度回溯。任何帮助都将不胜感激。谢谢

您需要使用 方法

您的代码将如下所示:

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

您的代码将如下所示:

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

这个问题类似于解析包含括号的数学术语。大多数人都会告诉你,正则表达式不是这样做的。我甚至不确定CSV是否是一种常规语言(我的大学时代已经过去了,所以我不确定这一点……XD)我的文件中有日语字符,其中包含非常复杂的字符模式,我认为任何解析器都无法轻松完成。此外,RE正在精细地分割数据,这给我留下了我刚刚发现的唯一问题。使用解析器将花费我在几十个地方对应用程序进行更改,考虑到时间跨度很小,这不是一个选项。使用解析器?这个问题类似于解析包含括号的数学术语。大多数人都会告诉你,正则表达式不是这样做的。我甚至不确定CSV是否是一种常规语言(我的大学时代已经过去了,所以我不确定这一点……XD)我的文件中有日语字符,其中包含非常复杂的字符模式,我认为任何解析器都无法轻松完成。此外,RE正在精细地分割数据,这给我留下了我刚刚发现的唯一问题。使用解析器将花费我在几十个地方对我的应用程序进行更改,这不是一个考虑时间跨度很小的选项。非常感谢。。。兄弟。工作起来就像一个符咒:-)完美,它保留了引号,在C#中完成了它的工作,所以谢谢你!非常感谢。。。兄弟。工作起来就像一个符咒:-)完美,它保留了引号,在C#中完成了它的工作,所以谢谢你!