Linq Split功能查询

时间:2011-10-12 05:04:31

标签: 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) => 
        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>

有人可以帮助我实现上述目标吗?

1 个答案:

答案 0 :(得分:1)

而不是:

x.Split(splitChar)

使用正则表达式尝试此方法:

Regex.Matches(x, "\"[^\"]*\"|[^,]+").Cast<Match>().Select(m => m.Value)

这与引用的字段匹配,例如:"foobar,baz" 不包含逗号的内容。

我的回答有一些限制:

  • 不会处理字符串中的转义引号,例如:"Test1,Test\"two\",Test3",0,1。你需要这个吗?
  • 分隔符不再是参数,而是硬编码。您必须小心,因为某些字符是特殊的,需要在正则表达式中进行转义。如果要根据Regex.Escape的运行时值构建正则表达式,请考虑使用splitChar