我用<BR>
标记代替\n
的所有发生,但由于某种原因输入的文本连续有很多\n
,所以我需要将它们合并。如何用一个<BR>替换多个换行符?
基本上,如果多于1个\ n一起出现,请将其替换为只有一个标签。
有人可以帮助我吗?
我用<BR>
标记代替\n
的所有发生,但由于某种原因输入的文本连续有很多\n
,所以我需要将它们合并。如何用一个<BR>替换多个换行符?
基本上,如果多于1个\ n一起出现,请将其替换为只有一个标签。
有人可以帮助我吗?
这将取代任何回车(\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 />");
使用下面的代码:
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 />");
注意与string.replace()比使用正则表达式快得多:
string result = oldString.Replace("\n\n","\n");
result = result .Replace("\n","<br>");
这不会处理三个换行符;你需要在循环中调用它。看到我的答案。 – SLaks 2009-11-13 00:57:59
不要低估自己。如果你甚至知道什么是正则表达式,你可能已经知道这个问题的答案。 – 2009-11-12 22:48:15