C # как Regex.Заменить "\ r \ n" (фактические символы, а не разрыв строки) - PullRequest
14 голосов
/ 30 ноября 2010

У меня есть какой-то ужасный текст, который я очищаю, используя несколько регулярных выражений c #. Одна проблема, которая поставила меня в тупик, заключается в том, что в тексте есть несколько строк '\ r \ n', а именно символы, а не разрывы строк.

Я пробовал:

content = Regex.Replace(content, "\\r\\n", "");

и

content = Regex.Replace(content, "\r\n", "");

но ни один из них не работает. В конце концов мне пришлось использовать:

content = content.Replace("\\r\\n", "\r\n");

чтобы завершить проект, но неспособность сделать это в регулярном выражении раздражает меня.

Ответы [ 7 ]

24 голосов
/ 30 ноября 2010

\r и \n также имеют особое значение в Regex, поэтому обратный слеш должен быть экранирован. Затем эти обратные слэши необходимо экранировать для строки c #, что приводит к

content = Regex.Replace(content, "\\\\r\\\\n", ""); 

или

content = Regex.Replace(content, @"\\r\\n", ""); 
7 голосов
/ 30 ноября 2010

Это хорошая идея, чтобы привыкнуть использовать дословные строковые литералы (@"example") при написании регулярных выражений в C #. В этом случае вам нужно это:

content = Regex.Replace(content, @"\\r\\n", "\r\n");

В противном случае вы должны экранировать каждый обратный слеш дважды : один раз, чтобы экранировать его в строке C #, а затем второй раз, чтобы экранировать их для регулярного выражения. Таким образом, одна обратная косая черта станет четырьмя обратными косыми чертами со стандартным строковым литералом.

3 голосов
/ 30 ноября 2010
content = Regex.Replace(content, "\\\\r\\\\n", "");

может работать. Подробнее здесь .

Цитата:

В литеральных строках C #, а также в C ++ и многие другие языки .NET, обратная косая черта является побегом. буквенная строка "\\" является одиночной обратная косая черта. В регулярных выражениях обратная косая черта также является побегом. Регулярное выражение \\ соответствует одиночная обратная косая черта. Это регулярно выражение в виде строки C #, становится "\\\\". Это верно: 4 обратных слеша соответствовать одному.

Примечание: я должен был написать 8 обратных слешей в следующем последнем предложении, чтобы отобразились 4 обратных слеша; -)

2 голосов
/ 30 ноября 2010

В указанной входной строке 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);

Не похоже, что это то, что вы пытаетесь сделать.

1 голос
/ 05 мая 2017

Лучший и простой ответ здесь. Это работает для меня, используя Regex.

public static string GetMultilineBreak(this string content)
{
    return Regex.Replace(content, @"\r\n?|\n", "<br>"); 
}
0 голосов
/ 16 февраля 2016

Вопрос старый, но произошли изменения.

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 и, возможно, в других.

0 голосов
/ 30 ноября 2010

Дикая догадка здесь:

var bslash = System.IO.Path.DirectorySeparatorChar.ToString();

content = content.Replace(bslash + "r" + bslash + "n", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...