2010-04-18 22 views
17

Tôi cần một TextBox trên một điều khiển WPF có thể lấy trong văn bản như Commit\r\n\r (đó là chuỗi .net "Commit\\r\\n\\r") và chuyển đổi nó thành "Commit\r\n\r" dưới dạng chuỗi .net. Tôi đã hy vọng cho một cặp string.Unescape() và string.Escape() phương pháp, nhưng nó dường như không tồn tại. Tôi sẽ phải viết của riêng tôi? hoặc là có một cách đơn giản hơn để làm điều này?Làm cách nào để bỏ chuỗi Unescape và Reescape trong .net?

+1

Không nhập điều đó vào hộp văn bản, chỉ cần nhấn phím Enter. –

+0

và nếu họ muốn nói \ r \ n \ r \ r? (vâng, đây là tình huống khả thi đối với mô hình cụ thể này) – Firoso

+5

Kiểm tra điều này: http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/08bb20a2-82b9-4f2f-9f1a-994961fbecc3/ –

Trả lời

6

Mã của Hans, phiên bản cải tiến.

  1. Made nó sử dụng StringBuilder - một tăng cường hiệu suất thực trên dây dài
  2. Made nó trở thành một phương pháp khuyến nông

    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(); 
        } 
    } 
    
+0

FYI hàm được liệt kê có tên sai - nó là/unescaping/một chuỗi, nhưng được gọi là EscapeStringChars(). – redcalx

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

Regex.Unescape method documentation

+6

System.Text.RegularExpressions.Regex.Unescape() – Dragouf

+9

Hãy coi chừng rằng đây là 'Regex' cụ thể và cũng có thể thoát chuỗi như' @ "\ [" 'thành' @ "[" ', điều này chỉ mong muốn nếu chúng ta nói về một regex, không phải là một chuỗi bình thường. – Silvermind

2

Tiếp theo phương pháp tương tự như javascript escape/unescape chức năng:

Microsoft.JScript.GlobalObject.unescape(); 

Microsoft.JScript.GlobalObject.escape(); 
Các vấn đề liên quan