Экранирование с помощью string.Replace
От: Shmj Ниоткуда  
Дата: 29.11.19 10:11
Оценка:
Сразу код: https://dotnetfiddle.net/RG65I4

Нужно чтобы в строке escaped не было символа новой строки ('\n' который). Но сделать это не классическим способом посимвольного перебора со счетчиком а через string.Replace.

Приведенное решение в принципе рабочее, но слишком уродливо. Можно ли как-то красивее?
Отредактировано 29.11.2019 10:18 Shmj . Предыдущая версия .
Re: Экранирование с помощью string.Replace
От: Muxa  
Дата: 29.11.19 10:26
Оценка: +2
ты определи критерии уродливости и красивости, а то непонятно чего хочешь
Re[2]: Экранирование с помощью string.Replace
От: Shmj Ниоткуда  
Дата: 29.11.19 10:29
Оценка: :)
Здравствуйте, Muxa, Вы писали:

M>ты определи критерии уродливости и красивости, а то непонятно чего хочешь


GUID — все-таки, пусть и очень маловероятно, но может такой же встретиться в тексте. Т.е. это решение не работает в 1 из 10^50 случаев а не все время, грубо говоря. Ну и текст слишком длиннее становится.

Может как-то можно без GUID? Типа ввести 3-й спец. символ или еще что?
Отредактировано 29.11.2019 10:36 Shmj . Предыдущая версия . Еще …
Отредактировано 29.11.2019 10:31 Shmj . Предыдущая версия .
Re: Экранирование с помощью string.Replace
От: rg45 СССР  
Дата: 30.11.19 19:09
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Сразу код: https://dotnetfiddle.net/RG65I4

S>Нужно чтобы в строке escaped не было символа новой строки ('\n' который). Но сделать это не классическим способом посимвольного перебора со счетчиком а через string.Replace.
S>Приведенное решение в принципе рабочее, но слишком уродливо. Можно ли как-то красивее?

Использование Regex.Replace не рассматриваешь? Результат сто процентов:

https://dotnetfiddle.net/6WlGc2

var unescaped2 = Regex.Replace(escaped, @"(?<!\\)\\n", "\n").Replace(@"\\", @"\");
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 30.11.2019 19:17 rg45 . Предыдущая версия .
Re[2]: Экранирование с помощью string.Replace
От: Shmj Ниоткуда  
Дата: 30.11.19 23:20
Оценка:
Здравствуйте, rg45, Вы писали:

R>Использование Regex.Replace не рассматриваешь? Результат сто процентов:


Может как-то и можно, но не так просто: https://dotnetfiddle.net/MDj1Jy
Re[3]: Экранирование с помощью string.Replace
От: rg45 СССР  
Дата: 01.12.19 07:41
Оценка:
Здравствуйте, Shmj, Вы писали:

R>>Использование Regex.Replace не рассматриваешь? Результат сто процентов:


S>Может как-то и можно, но не так просто: https://dotnetfiddle.net/MDj1Jy


Угу, поторопился я. Исправляю:

https://dotnetfiddle.net/aMwca0

var unescaped2 = Regex.Replace(escaped, @"((?<!\\)(\\\\)*)\\n", "$1\n").Replace(@"\\", @"\");
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[3]: Экранирование с помощью string.Replace
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.12.19 22:46
Оценка: :))
Здравствуйте, Shmj, Вы писали:

S>Может как-то можно без GUID? Типа ввести 3-й спец. символ или еще что?


А ты используй не GUID, а SHA2 от escaped. Тогда взлом твоей программы будет эквиавалентен взлому SHA2.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.