逗号和双引号CSV格式的正则表达式拆分[重复]

Posted

技术标签:

【中文标题】逗号和双引号CSV格式的正则表达式拆分[重复]【英文标题】:Regex split for comma and double quotes CSV format [duplicate] 【发布时间】:2016-02-14 22:15:00 【问题描述】:

我不是很擅长正则表达式。

字符串:

"FF","asdadasd60","Report,License","502","5A1301","I-Web Report,License","50A1","PR02","02","5A11","REL","","","","A1170600","500008","FA10","5000001","","","","","000000000.000","","000000000.000","","000000000.000","","000000000.000","","00000000","00000000","",""

我已经这样做了,但之前删除了双引号。但是字符串Report,LicenseI-Web Report,License 的结果被拆分了。这是错误的。

我想用逗号将它拆分成数组,用逗号放在不在其中的双引号之间。

【问题讨论】:

我会手动执行此操作。你知道,List<string>for-loop 和Substring。我猜它的性能更高。 var values = Regex.Split(line, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$ )"); 【参考方案1】:

使用真正的 csv 解析器,而不是使用字符串方法或正则表达式。您可以直接使用框架中唯一可用的TextFieldParser

var allLineFields = new List<string[]>();
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(str)))

    parser.Delimiters = new string[]  "," ;
    parser.HasFieldsEnclosedInQuotes = true; // <--- !!!
    string[] lineFields;
    while ((lineFields = parser.ReadFields()) != null)
    
        allLineFields.Add(lineFields);
    

您需要在项目中添加对Microsoft.VisualBasic dll 的引用。

还有其他可用的:Parsing CSV files in C#, with header

【讨论】:

以上是关于逗号和双引号CSV格式的正则表达式拆分[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式拆分 CSV

正则表达式将引号添加到不带引号的 CSV 列

GROOVY - 解析CSV:忽略双引号内的逗号

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

正则表达式删除由双引号划定的 CSV 字段中的双引号

Java正则表达式用逗号分割字符串,但忽略引号和括号[重复]