如何用一个替换多个换行符?

时间:2009-11-12 22:45:05

标签: c# regex editor

我正在使用\n标记替换<BR>的所有出现,但由于某种原因,输入的文本连续多个\n,因此我需要将它们合并。

基本上,如果超过1 \ n一起出现,请将其替换为仅一个&lt; BR&gt;标签

有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:21)

这将用一个\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 />");

答案 1 :(得分: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 />");

答案 2 :(得分:-1)

请注意,string.Replace()比使用RegEx快得多:

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