C# Linq分割函数查询

C# Linq分割函数查询,c#,string,linq,C#,String,Linq,我有一个csv文件,其中包含以下记录: Col1,Col2,Col3 “测试,测试1”,1,3 下面是Linq查询,它将csv分解为XML文档。然而,在上面给出的示例中,它将“Test,Test1”拆分为两个单独的元素 var xml = new XElement("Root", source.Select(x => new XElement("Testing", x.Split(splitChar).Select((Field, index) => ne

我有一个csv文件,其中包含以下记录:

Col1,Col2,Col3

“测试,测试1”,1,3

下面是Linq查询,它将csv分解为XML文档。然而,在上面给出的示例中,它将“Test,Test1”拆分为两个单独的元素

var xml = new XElement("Root", source.Select(x => 
    new XElement("Testing", x.Split(splitChar).Select((Field, index) => 
        new XElement("Field" + index, Field)))).Skip(1));
这会产生如下结果:

<Root>
<Testing Field0="Test" Field01="Test1" Field02="1" Field03="3" />

</Root>

但我想要的是:

<Root>
<Testing Field0="Test,Test1" Field01="1" Field02="3" />

</Root>

有人能帮我完成上面的工作吗?

而不是这个:

x.Split(splitChar)
使用正则表达式尝试此方法:

Regex.Matches(x, "\"[^\"]*\"|[^,]+").Cast<Match>().Select(m => m.Value)
Regex.Matches(x,“\”[^\“]*\“\[^,]+”).Cast().Select(m=>m.Value)
这与引用的字段相匹配,例如:
“foobar,baz”
或不包含逗号的字段

我的回答有一些局限性:

  • 它不处理字符串中的转义引号,例如在本例中:
    “Test1,Test\“two\”,Test3“,0,1
    。您需要这个吗
  • 分隔符不再是参数,而是硬编码的。您必须小心,因为某些字符是特殊的,需要在正则表达式中转义。请考虑使用<代码>正则表达式。
谢谢@Mark Byers,上面的正则表达式是什么?谢谢heaps@Mark Byers,它起作用了。忽略我之前的评论。不知道为什么我会将“x”视为“s”。