逗号和双引号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,License
和I-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格式的正则表达式拆分[重复]的主要内容,如果未能解决你的问题,请参考以下文章