С# как Regex.Replace "\ r\n" (фактические символы, а не разрыв строки)
У меня есть ужасный текст, который я очищаю, используя несколько регулярных выражений С#. Одна из проблем, которая меня озадачила, состоит в том, что в тексте есть ряд строк "\ r\n", фактические символы не разрываются.
Я пробовал:
content = Regex.Replace(content, "\\r\\n", "");
и
content = Regex.Replace(content, "\r\n", "");
но ни один из них не работает. В конце концов мне пришлось использовать:
content = content.Replace("\\r\\n", "\r\n");
чтобы завершить проект, но неспособность сделать это в регулярном выражении меня раздражает.
Ответы
Ответ 1
\r
и \n
имеют особое значение в Regex, поэтому обратная косая черта должна быть экранирована. Затем эти обратные косые черты должны быть экранированы для строки С#, что приводит к
content = Regex.Replace(content, "\\\\r\\\\n", "");
или
content = Regex.Replace(content, @"\\r\\n", "");
Ответ 2
Это хорошая идея, чтобы привыкнуть использовать строковые литералы (@"example"
) при написании регулярных выражений в С#. В этом случае вам понадобилось следующее:
content = Regex.Replace(content, @"\\r\\n", "\r\n");
В противном случае вам нужно избежать каждой обратной косой черты дважды: один раз, чтобы избежать ее в строке С#, а затем второй раз, чтобы избежать их для регулярного выражения. Таким образом, одна обратная косая черта станет четырьмя обратными косыми чертами со стандартным строковым литералом.
Ответ 3
content = Regex.Replace(content, "\\\\r\\\\n", "");
может работать. Подробнее здесь.
Цитата:
В буквальных строках С#, а также в С++ и многих других языках .NET, обратная косая черта - это escape-символ. Литеральная строка "\\" является одиночной обратная косая черта. В регулярных выражениях обратная косая черта также является символом escape. Регулярное выражение\\соответствует одиночный обратный слэш. Этот регулярный выражение как строка С#, становится "\\\\". Это право: 4 обратных слэша чтобы соответствовать одному.
Примечание. Мне пришлось написать 8 обратных косых черт в следующем последнем предложении, чтобы отображались 4 обратных слэша; -)
Ответ 4
В пределах указанной входной строки Regex.Replace
заменяет строки, которые соответствуют шаблону регулярного выражения с указанной заменой.
Типичное использование будет
string input = "This is text with far too much " + " whitespace.";
string pattern = "\\s+";
string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
Не похоже, что вы пытаетесь сделать.
Ответ 5
Вопрос старый, но произошли изменения.
string temp = Regex.Replace(temp, "\\n", " ");
или лучше
string temp = Regex.Replace("tab d_space newline\n content here :P", @"\s+", " ");
//tab d_space newline content here :P
Это работает на универсальных приложениях Windows и, возможно, на других.
Ответ 6
Лучший и простой ответ здесь. Он работает для меня с помощью Regex.
public static string GetMultilineBreak(this string content)
{
return Regex.Replace(content, @"\r\n?|\n", "<br>");
}
Ответ 7
Дикая догадка здесь:
var bslash = System.IO.Path.DirectorySeparatorChar.ToString();
content = content.Replace(bslash + "r" + bslash + "n", "");