拆分csv文件,但忽略c#中引号之间的新行

Posted

技术标签:

【中文标题】拆分csv文件,但忽略c#中引号之间的新行【英文标题】:split csv files, but ignore new lines between quotes in c# 【发布时间】:2021-09-20 09:28:34 【问题描述】:

我正在尝试创建一个 CSV 阅读器,但是,我有一个问题,即某些 CSV 字段中可以包含多行数据,因此当您用新行拆分它们时,它实际上也会拆分这些字段.

基本上我要做的是忽略引号之间的任何 /n,以便正确拆分行。

到目前为止,这是我的尝试,但这似乎不起作用

private static string[] SplitCsvLines(string input)
    
        //Excludes new lines within quotes  
        var csvSplit = new Regex("(?:^|/n)(\"(?:[^\"]+|\"\")*\"|[^,]*)", RegexOptions.Compiled);
        var list = new List<string>();
        foreach (Match match in csvSplit.Matches(input))
        
            var curr = match.Value;
            if (0 == curr.Length)
            
                list.Add("");
            

            list.Add(curr.TrimStart(','));
        

        return list.ToArray();
    

【问题讨论】:

您能否展示一些输入和预期输出的示例?您是否尝试过使用库来处理 CSV 读取/写入,这样您就不必自己编写代码了? 您可以在处理 csv 之前删除这些换行符。 如果添加 RegexOptions.Singleline,则 .将匹配换行符,但您必须重组您的正则表达式才能使用它。像 ((\"(.*)?\"(?!\"))|((?!\")[^,]*?)(,|$) 之类的东西。如果引用,字符串将是 $3 或 $4如果没有引用。 【参考方案1】:

正则表达式不足以达到此目的。必须通过正则表达式分析的 CSV 数据实在是太复杂了。您必须处理诸如转义、换行、错误数据的错误处理、代码的可维护性等主题。由于正则表达式使这种管理复杂化,因此它不是一个合适的工具。因此,我建议使用库(CsvHelper 是一个非常好的高性能库,可以定期更新)。

【讨论】:

以上是关于拆分csv文件,但忽略c#中引号之间的新行的主要内容,如果未能解决你的问题,请参考以下文章

用于 CSV 拆分的正则表达式,包括多个双引号

在 CSV UNIX 中删除双引号之间的 \n

在python中计算30GB + csv文件中双引号外的新行数

C#导入csv文件,数据中有逗号怎么处理

使用 c# 在 CSV 文件中用双引号将每个字段括起来

C#获取CSV文件内容对逗号和引号分隔的处理