Как я могу выделить строки Unescape и Reescape в .net?

18

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

    
задан Firoso 18.04.2010 в 06:45
источник
  • Не вводите это в текстовое поле, просто нажмите клавишу Enter. –  Hans Passant 18.04.2010 в 06:49
  • , и если они хотят сказать \ r \ n \ r \ r? (да, это жизнеспособная ситуация на этой конкретной модели) –  Firoso 18.04.2010 в 06:55
  • Проверьте это: social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/... –  Hans Passant 18.04.2010 в 07:09
  • @firoso: Почему бы вам не сделать это? –  Noon Silk 18.04.2010 в 07:20
  • @silky: Я не предоставлял решение, Ханс заслуживает согласия. –  Firoso 18.04.2010 в 07:34

3 ответа

39
System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!")

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

    
ответ дан Diego F. 03.09.2010 в 16:05
источник
  • System.Text.RegularExpressions.Regex.Unescape () –  Dragouf 30.06.2011 в 15:55
  • Остерегайтесь, что это специфично для Regex, а также избегает строк, таких как @ "\ [" в @ "[", что желательно только в том случае, если мы говорим о регулярном выражении, а не о нормальной строке. –  Silvermind 02.05.2014 в 13:17
7

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

  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();
        }
    }
    
ответ дан Fyodor Soikin 18.04.2010 в 13:16
источник
  • FYI указанная функция имеет неправильное имя - она ​​/ unescaping / строка, но называется EscapeStringChars (). –  redcalx 25.06.2012 в 15:27
3

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

Microsoft.JScript.GlobalObject.unescape();

Microsoft.JScript.GlobalObject.escape();
    
ответ дан hs.jalilian 30.06.2012 в 16:27
источник