2009-11-12 40 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