Как я могу заменить несколько разрывов строк одним <BR>? - PullRequest
7 голосов
/ 13 ноября 2009

Я заменяю все вхождения \n на тег <BR>, но по какой-то причине во введенном тексте есть много \n подряд, поэтому мне нужно объединить их.

Как правило, если вместе встречается более 1 \ n, замените его только одним тегом
.

Может ли кто-нибудь помочь мне с этим?

Ответы [ 3 ]

22 голосов
/ 13 ноября 2009

Это заменит любую последовательность возвратов каретки (\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 />");
2 голосов
/ 13 ноября 2009

Используйте следующий код:

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

Вполне может быть быстрее вызвать нормальный метод Replace несколько раз и вообще не использовать Regex, например:

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 />");
0 голосов
/ 13 ноября 2009

Обратите внимание, что string.Replace () намного быстрее, чем использование RegEx:

string result = oldString.Replace("\n\n","\n");
result = result .Replace("\n","<br>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...