Я пытаюсь экранировать символы новой строки, пока игнорируя уже экранированные символы новой строки.
Код: Выделить всё
// 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))" - — работает на регулярном выражении 101, но не на C#
Код: Выделить всё
@"(?[rn])" - — также работает с регулярным выражением 101, но не с C#.
Код: Выделить всё
@"(?\\[rn])"
Подробнее здесь: https://stackoverflow.com/questions/792 ... bstitution
Мобильная версия