使用正则表达式和CSV引号字符串

本文关键字:字符串 CSV 正则表达式 | 更新日期: 2023-09-27 18:16:43

我正在尝试转换一个字符串,如

"test",645,23.4,42,"13,13,14","test"

"test","645","23.4","42","13,13,14","test"

我正在尝试这个代码。

string pattern = "'",(? !'")";
string pattern2 = "(?<!'"),(? !'")";
string pattern3 = "(?<!'"),'"";
string replacement = "'",'"";
Regex rgx = new Regex(pattern);
catalogo = rgx.Replace(catalogo, replacement);
rgx = new Regex(pattern2);
catalogo = rgx.Replace(catalogo, replacement);
rgx = new Regex(pattern3);
catalogo = rgx.Replace(catalogo, replacement);

,但我不知道如何得到过去的值,已经包含逗号。"13,13,14",因为它会把它变成"13","13","14"

我不知道这是否是转换字符串的最佳方式,但至少我相信它会完成这项工作,只是我不知道为什么我要通过这个

使用正则表达式和CSV引号字符串

我不知道为什么你需要使用Regex来解析逗号分隔的数据。
有很多免费的库专门用于解析这类数据,同样的。NET框架在Microsoft.VisualBasic.IO命名空间

中提供了一个特定的类。

如何使用

string t = "'"test'",645,23.4,42,'"13,13,14'",'"test'"";
StringReader sr = new StringReader(t);
TextFieldParser tp = new TextFieldParser(sr);
tp.Delimiters = new string[] {","};
tp.HasFieldsEnclosedInQuotes = true;
string[] result = tp.ReadFields();
foreach(string s in result)
   Console.WriteLine(s);

此代码检索您的数据并尊重双引号中包含的字段,避免解析这些字段的内容。然而,似乎您还需要在每个检索到的字符串周围加上双引号,因此您需要第二个循环来读取缺失的引号

for(int x = 0; x < result.Length; x++)
    result[x] = string.Concat("'"", result[x], "'"");
顺便说一下,我不建议使用这个类、免费库或自定义代码。在这些选项之间进行选择总是需要在成本(编写、调试、测试、文档)和性能之间进行权衡。如果性能是解决方案的一个关键方面,那么您需要使用来自FTP服务器的真实数据测试很多东西。一个只有你才能完成的任务。