Как я могу строки Unescape и Reescape в .net? - PullRequest
22 голосов
/ 18 апреля 2010

Мне нужен TextBox на элементе управления WPF, который может принимать текст вроде Commit\r\n\r (который является строкой .net "Commit\\r\\n\\r") и преобразовывать его обратно в "Commit\r\n\r" как строку .net. Я надеялся на пару методов string.Unescape () и string.Escape (), но, похоже, не существует. Я собираюсь написать свое? или есть более простой способ сделать это?

Ответы [ 3 ]

42 голосов
/ 03 сентября 2010
System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!")

Документация по методике Regex.Unescape

9 голосов
/ 18 апреля 2010

код Ганса, улучшенная версия.

  1. Сделано с использованием StringBuilder - реальный усилитель производительности на длинных струнах
  2. Сделано это методом расширения

    public static class StringUnescape
    {
        public static string Unescape(this string txt)
        {
            if (string.IsNullOrEmpty(txt)) { return txt; }
            StringBuilder retval = new StringBuilder(txt.Length);
            for (int ix = 0; ix < txt.Length; )
            {
                int jx = txt.IndexOf('\\', ix);
                if (jx < 0 || jx == txt.Length - 1) jx = txt.Length;
                retval.Append(txt, ix, jx - ix);
                if (jx >= txt.Length) break;
                switch (txt[jx + 1])
                {
                    case 'n': retval.Append('\n'); break;  // Line feed
                    case 'r': retval.Append('\r'); break;  // Carriage return
                    case 't': retval.Append('\t'); break;  // Tab
                    case '\\': retval.Append('\\'); break; // Don't escape
                    default:                                 // Unrecognized, copy as-is
                        retval.Append('\\').Append(txt[jx + 1]); break;
                }
                ix = jx + 2;
            }
            return retval.ToString();
        }
    }
    
3 голосов
/ 30 июня 2012

Следующие методы такие же, как функции escape / unescape javascript:

Microsoft.JScript.GlobalObject.unescape();

Microsoft.JScript.GlobalObject.escape();
...