在某些情况下使用双引号解析 CSV

2022-09-01 19:09:25

我有格式附带的csv:

a1, a2, a3, “a4,a5”, a6

只有 带 的字段才会有引号

使用Java,如何轻松解析它?我尽量避免使用开源CSV解析器作为公司政策。谢谢。


答案 1

您可以与以下正则表达式一起使用: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


答案 2

我遇到了同样的问题(但在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(',')
    }

或者,使用正则表达式。


推荐