在某些情况下使用双引号解析 CSV
我有格式附带的csv:
a1, a2, a3, “a4,a5”, a6
只有 带 的字段才会有引号
使用Java,如何轻松解析它?我尽量避免使用开源CSV解析器作为公司政策。谢谢。
我有格式附带的csv:
a1, a2, a3, “a4,a5”, a6
只有 带 的字段才会有引号
使用Java,如何轻松解析它?我尽量避免使用开源CSV解析器作为公司政策。谢谢。
您可以与以下正则表达式一起使用:Matcher.find
\s*("[^"]*"|[^,]*)\s*
下面是一个更完整的示例:
String s = "a1, a2, a3, \"a4,a5\", a6";
Pattern pattern = Pattern.compile("\\s*(\"[^\"]*\"|[^,]*)\\s*");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
看到它在线工作:ideone
我遇到了同样的问题(但在Python中),我发现解决它的一种方法,没有正则表达式,是:当你得到行,检查任何引号,如果有引号,拆分引号上的字符串,并将结果数组的偶数索引结果拆分为逗号。奇数索引字符串应为全引号值。
我不是Java程序员,所以把它当作伪代码...
line = String[];
if ('"' in row){
vals = row.split('"');
for (int i =0; i<vals.length();i+=2){
line+=vals[i].split(',');
}
for (int j=1; j<vals.length();j+=2){
line+=vals[j];
}
}
else{
line = row.split(',')
}
或者,使用正则表达式。