2009-11-12 84 views
5

我用<BR>標記代替\n的所有發生,但由於某種原因輸入的文本連續有很多\n,所以我需要將它們合併。如何用一個<BR>替換多個換行符?

基本上,如果多於1個\ n一起出現,請將其替換爲只有一個標籤。

有人可以幫助我嗎?

+3

不要低估自己。如果你甚至知道什麼是正則表達式,你可能已經知道這個問題的答案。 – 2009-11-12 22:48:15

回答

18

這將取代任何回車(\r)和/或換行(\n)的順序與單個<br />

string formatted = Regex.Replace(original, @"[\r\n]+", "<br />"); 

如果您只想替換兩個或更多項目的序列,那麼簡單的答案是使用{2,}量詞(意思是「至少兩次重複」)而不是+(意思是「至少一次重複」):

string formatted = Regex.Replace(original, @"[\r\n]{2,}", "<br />"); 

請注意,上述表達式將把普通CR + LF組合看作是兩個項目的序列。這是可能的,你要對待CR + LF作爲單個項目來代替,在這種情況下,表達變得稍微複雜些:

string formatted = Regex.Replace(original, @"(?:\r\n|\r(?!\n)|(?<!\r)\n){2,}", "<br />"); 
+0

什麼是\ r?對於? – mrblah 2009-11-12 22:58:25

+1

\ r用於回車。在Windows(DOS)格式的文本中,您會看到\ r \ n格式的回車符/換行符組合。 – 2009-11-12 23:06:19

+0

是否可以在替換之前設置至少2次重複? – mrblah 2009-11-12 23:17:46

2

使用下面的代碼:

str = Regex.Replace(str, @"[\r\n]+", "<br />"); 

它很可能快於正常Replace方法多次調用,而不是使用正則表達式可言,像這樣:

int oldLength; 
do { 
    oldLength = str.Length; 
    str = str.Replace('\r', '\n'); 
    str = str.Replace("\n\n", "\n"); 
} while(str.Length != oldLength); 

str = str.Replace("\n", "<br />"); 
-1

注意與string.replace()比使用正則表達式快得多:

string result = oldString.Replace("\n\n","\n"); 
result = result .Replace("\n","<br>"); 
+0

這不會處理三個換行符;你需要在循環中調用它。看到我的答案。 – SLaks 2009-11-13 00:57:59