RFC 4180用于CSV的正则表达式(C#)

RFC 4180用于CSV的正则表达式(C#),c#,regex,csv,C#,Regex,Csv,需要通用CSV解析器。 有一个csv文件,包含规范的所有问题: Excel在规范中写入文件时打开该文件: 有人用正则表达式来解析它吗 CSV文件 “a b c“,”x y z“,357 试验;测试,xxx;xxx,152 “测试2,测试2”,“xxx2,xxx2”,123 “test3”“test3”“xxx3”“xxx3”,987 ,qwe,13 asd,123, ,, ,123, ,123 123,, 123123 预期结果 我想说,忘掉正则表达式吧。可以通过TextFieldParser类

需要通用CSV解析器。 有一个csv文件,包含规范的所有问题:

Excel在规范中写入文件时打开该文件:

有人用正则表达式来解析它吗

CSV文件

“a
b
c“,”x
y
z“,357
试验;测试,xxx;xxx,152
“测试2,测试2”,“xxx2,xxx2”,123
“test3”“test3”“xxx3”“xxx3”,987
,qwe,13
asd,123,
,,
,123,
,123
123,,
123123

预期结果


我想说,忘掉正则表达式吧。可以通过TextFieldParser类轻松解析CSV。要做到这一点,你需要

using Microsoft.VisualBasic.FileIO;
然后您可以使用它:

  using (TextFieldParser parser = new TextFieldParser(Stream))
  {
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");

    while (!parser.EndOfData)
    {
      string[] fields = parser.ReadFields();
      foreach (string field in fields)
      {
         // Do your stuff here ...
      }
    }
  }

注意:尽管下面的解决方案可能适用于其他正则表达式引擎,但按原样使用它将要求您的正则表达式引擎将其视为一个单独的捕获组。(.NET默认情况下会执行此操作)


关于图案 当CSV文件/流(匹配)的一个或多个行/记录传递给下面的正则表达式时,它将为每个非空行/记录返回匹配。每个匹配项将包含一个名为
Value
的捕获组,该捕获组包含该行/记录中捕获的值(如果该行/记录末尾有一个开放引号,则可能包含一个
OpenValue
捕获组)

下面是注释模式(测试它):

(?