2010-10-21 40 views
5

我有一個文本文件,其中包含更多或更少的段落。文本實際上不是單詞,它的逗號分隔數據;但這並不重要。文本文件被分爲幾個部分;可以有章節和小節。部分的劃分由多個換行符和小節以換行符表示。C#Regex.Replace多個換行

所以樣本數據:

This is the, start of a, section 
908690,246246246,246246 
246246,246,246246 

This is, the next, section, 
sfhklj,sfhjk,4626246 
4yw2,fdhds5juj,53ujj 

所以上面的數據包含兩個部分,每個具有三個子部分。然而,有時候,部分之間有多條空行。發生這種情況時,我想將多個換行符(\n\n\n\n)轉換爲\n\n;我認爲正則表達式可能是這樣做的方式。我也可能需要使用不同的換行標準,unix \n和windows \r\n。我認爲這些文件可能包含多個endline編碼。

這是我想出的正則表達式;它沒什麼特別的:

Regex.Replace(input, @"([\r\n|\n]{2,})", Enviroment.NewLine + Enviroment.NewLine} 

首先,這是一個很好的正則表達式的解決方案?正則表達式我不太好。

其次,我則想每一節分成一個元素的字符串數組:

Regex.Split(input, Enviroment.NewLine + Enviroment.NewLine) 

有沒有辦法將這些步驟結合起來?

+0

我想你應該先用'Enviroment.NewLine'替換'([\ r \ n | \ n])'來保持數據的一致性。我不知道如何優化它,我想你不能將它們合併。我想你是對的。你可能想要設置'RegexOptions.Compiled'來加快速度。 – BrunoLM 2010-10-22 00:03:20

回答

6

[\r\n|\n]是錯誤的。這是一個character class,它與字符\r\n|之一匹配。

匹配通用行分隔符的常見習語是(?:\r\n|[\r\n])(?:\n|\r\n?)。這些將匹配\r\n(DOS/Windows),\r(舊Macintosh)或\n(Unix/Linux/Mac OS X)。

我會正常化的所有行分隔符來\n,然後分裂在兩個或更多的這些:

Regex.Split(Regex.Replace(source, @"(?:\r\n|[\r\n])", "\n"), @"\n{2,}") 
+0

太好了,謝謝。正是我在找什麼。很高興知道我的正則表達式在正確的軌道上至少有一半。 – Shawn 2010-10-22 00:37:18

0

我將只使用String.Split和第一文本拆分爲使用雙換行符分隔的部分,然後分裂各將該部分轉換爲使用單個換行符作爲分隔符的子部分。 然後你將會得到你想要的數組。您可以使用List<string>對象作爲容器,並將使用AddRange的拆分方法返回的數組添加到容器。