2012-08-13 66 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