Экранирование новой строки с помощью замены Regex.ReplaceC#

Место общения программистов C#
Ответить
Anonymous
 Экранирование новой строки с помощью замены Regex.Replace

Сообщение Anonymous »

Я пытался следовать документации по заменам, но мне не удалось заставить это регулярное выражение фиксировать правильные группы.
Я пытаюсь экранировать символы новой строки, пока игнорируя уже экранированные символы новой строки.

Код: Выделить всё

// Simple string with mixed escaped newlines and unescaped newlines
var TEST_STRING     = "Hello\\rMy\r\nFriendly\\nWorld";
var EXPECTED_STRING = "Hello\\rMy\\r\\nFriendly\\nWorld";

// Replace all unescaped newlines
// (?[rn]) - name the character matched in this group "symbol" for use in the replacement, match a 'r' or 'n'
var searchPattern = @"(?(\r|\n))";
var replacement = "\\${symbol}";
var substitutedString = Regex.Replace(input: TEST_STRING, searchPattern, replacement);

// check if the output matches
Console.WriteLine(substitutedString);                    // "Hello\\rMy\\\r\\\nFriendly\\nWorld"
Console.WriteLine(substitutedString == EXPECTED_STRING); // FALSE
Я знаю, что могу записать и заменить их двумя отдельными поисковыми запросами:
  • Код: Выделить всё

    @"(?(\r|\n))"
     – который, похоже, правильно фиксирует группы, но не заменяет символ, как ожидалось.
  • Код: Выделить всё

    @"(?[rn])"
    — работает на регулярном выражении 101, но не на C#
  • Код: Выделить всё

    @"(?\\[rn])"
    — также работает с регулярным выражением 101, но не с C#.
Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/792 ... bstitution
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»