拆分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#中引号之间的新行的主要内容,如果未能解决你的问题,请参考以下文章