我正在使用\n
标记替换<BR>
的所有出现,但由于某种原因,输入的文本连续多个\n
,因此我需要将它们合并。
基本上,如果超过1 \ n一起出现,请将其替换为仅一个&lt; BR&gt;标签
有人可以帮我这个吗?
答案 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>");