2012-08-13 54 views
1

可能重复:
Parsing CSV files in C#正则表达式管道Delimted带引号标识符

我有一个解析管道分隔的文件C#应用程序。它使用Regex.Split方法:

Regex.Split(line, @"(?<!(?<!\\)*\\)\|") 

不过最近的数据文件碰到一个包含在数据领域的一个管道。问题中的数据字段使用带引号的标识符,因此当您在Excel中打开时,它会正确打开。

比如我有一个看起来像一个文件:

字段1 |科研成果|“现场3具有|引号里面” |字段4

当我使用上述正则表达式它解析到:

字段1
字段2
字段3具有
引号内
字段4

当我想

字段1
字段2
场3有一个|里面的报价
字段4

我已经做了相当数量的研究,似乎无法得到Regex.Split在管道上拆分文件,但尊重引用标识符。任何帮助是极大的赞赏!

+1

不要使用正则表达式来处理csv文件,这里有csv解析器,请参阅[这个答案](http://stackoverflow.com/questions/2081418/parsing-csv-files-in-c-sharp) – stema 2012-08-13 07:54:13

回答

1

这里是一个快速表达我扔在一起比,似乎这样的伎俩:

"([^"]+)"|([^\|]+) 

虽然你的表情似乎是在做与\的东西为好,所以你可能需要添加到这个表达式有你需要的其他需求。我在回答中忽略了他们,因为他们在问题中没有解释,因此我不能在不知道他们为什么在那里的情况下提供解决方案 - 他们实际上可能根本就不需要在那里。

此外,我的表达式忽略了空字段(即1 || 2 | 3只会出现为1,2和3),我不知道这是否是您需要的,如果它不是我知道,我可以改变表达的东西,以迎合这一点。

希望这有助于反正。

+0

当谈到正则表达式我显然无能为力。但以您的示例并将其放入C#将无法编译。这里是code:string [] parts = Regex.Split(line,@“([^”] +)“|([^ \ |] +);抛出”换行符换行“错误 – 2012-08-14 11:31:49

+0

啊,很少的斜杠(即使在包含引号的字符串前面使用@符号也需要使用),并且您似乎缺少结尾引号和括号。试试这个:string [] parts = Regex.Split(line,@ “([^ \”] +)\ “|([^ \ |] +)”); – Anupheaus 2012-08-14 11:46:18