2010-10-24 61 views
0

我有一個應該是\ n \ n分隔的文件,但它當然不是。某些行在\ n \ n後面包含空格。如何在\ n \ n之後找到一個刪除所有空格的新行,但該行在任何其他字符之前。C#正則表達式替換

樣品:

\n\nData,Mo re,Data 
\n\n Some,Li st,Of 
\n\n\nOther,St uff 
\n\n\n\n This is another 

所需的輸出

\n\nData,Mo re,Data 
\n\nSome,Li st,Of 
\n\nOther,St uff 
\n\nThis is another 

正則表達式是可能的答案,但我還在學習正則表達式。這或多或少是我想出的Regex.Replace(input,"^(\n{2,}\s*)", "\n\n"),但它不起作用。

編輯:我應該注意到,在需要此代碼之前,我將各種不同的換行符編碼預轉換爲\n

回答

2

反斜槓字符需要轉義。嘗試:

Regex.Replace(input,"^(\n{2,}\\s*)", "\n\n") 

此外,你應該考慮改變\\s*\\s+這樣你就不會更換有效行unnecesarily開始。

+1

這可能是問題所在。但是,然後OP的代碼甚至沒有編譯,因爲轉義序列'\ s'在一個非逐字字符串中不能被識別,所以我想知道。 – Ani 2010-10-24 01:27:46

+0

我認爲OP需要保留\\ s *,因爲給定輸入上所需的輸出基準。請注意,OP還希望\ n \ n \ n替換爲\ n \ n。 – Les 2010-10-24 02:12:00

0
 string test = "\n\nData,Mo re,Data \r\n\n\n Some,Li st,Of \r\n\n\n\nOther,St uff \r\n\n\n\n\n This is another \r\n"; 
     string pattern = "^\n{2,}\\s*"; 
     string result = Regex.Replace(test, pattern, "\n\n", RegexOptions.Multiline); 

首先,您需要Multiline選項。其次,你的數據真的看起來如何?注意,如果你有一個可見的cr-lf,我把它放在\ r \ n中。我這樣做是因爲你說在分隔數據的一行的開頭是\ n \ n。 \ n混淆工作,所以請確保您的數據。