Экранирование и замена регулярных выражений на C #

#c# #json #regex #replace

#c# #json #регулярное выражение #заменить

Вопрос:

У меня есть API, который отправляет документы по электронной почте. Я использую параметр, который позволяет мне указывать сообщение электронной почты. Для этого требуются разрывы строк в формате Json ( n). Я использую регулярное выражение для экранирования текста текстового поля, как показано ниже.

 string JsonMessage = string.Format("{0}n{1}", System.Text.RegularExpressions.Regex.Escape(this.txtMailMessage.Text), System.Text.RegularExpressions.Regex.Escape(this.txtMailMessage.Text));
        JsonMessage = JsonMessage.Replace("r", "");
        Console.WriteLine(JsonMessage);
  

Вот пример вывода: 5 r n5 r n5

Как показано, я пытаюсь заменить r, чтобы добиться «разрыва строки» в Json. Таким образом, это выглядело бы так: 5 n5 n5

Чего я, кажется, не могу понять, так это того, что когда я применяю JsonMessage = JsonMessage.Replace("r", ""); , это не заменяет r

Комментарии:

1. Попробуйте JsonMessage.Replace("\r", "");

2. Выведите строку JsonMessage перед попыткой замены на консоль. Обратите внимание, что если вы видите на выходе буквально r — я имею в виду буквально обратную косую черту, за которой следует r -, то у вас нет никакого » r» в вашем JsonMessage. "r" представляет собой строку, содержащую только ОДИН символ; этим символом является CR (возврат каретки). Этот символ не виден, поэтому появление r в выводе консоли будет свидетельствовать о том, что в вашем JsonMessage его нет, а скорее "r" ……….. "\r" .

3. @G5W Спасибо, что помогло!

Ответ №1:

Вам нужно использовать JsonMessage.Replace("\r", "");
\ Будет интерпретироваться как одна обратная косая черта.

Ответ №2:

Вместо того, чтобы заменять » r» ничем, попробуйте заменить » r n» на » n» как

         string mystring = "5rn5rn5";
        mystring = mystring.Replace("rn", "n");
  

Это приведет к «5 n5 n5»