{
должен быть экранирован на {{}
. }
должен быть экранирован {}}
. Эта попытка сбежать ...
// NON-WORKING EXAMPLE!
txt = txt.Replace("{", "{{}");
txt = txt.Replace("}", "{}}");
... проблема в том, что правые скобки, введенные первой заменой, снова сбрасываются второй заменой. Итак, начиная с {
вы получите
{ --> {{} --> {{{}}
что не так. Чтобы избежать экранирующих скобок, вводимых именно как экранированные, используйте суррогатный символ для закрывающей escape-скобки в первой замене. Например. какой-нибудь китайский символ 閉
, предполагая, что вы никогда не захотите отправить этот символ.
txt = txt.Replace("{", "{{閉");
txt = txt.Replace("}", "{}}");
// After having done the escape, replace the surrogate by the closing brace again.
txt = txt.Replace("閉", "}");
Если вы не уверены, что один символ никогда не будет отправлен, используйте невероятную последовательность символов в качестве суррогата, возможно, из разных алфавитов, таких как 閉©ξ
(китайский, латинская пунктуация, греческий).