How can I Unescape and Reescape strings in .net?
I need a TextBox on a WPF control that can take in text like Commit\r\n\r
(which is the .net str开发者_开发问答ing "Commit\\r\\n\\r"
) and convert it back to "Commit\r\n\r"
as a .net string. I was hoping for a string.Unescape() and string.Escape() method pair, but it doesn't seem to exist. Am I going to have to write my own? or is there a more simple way to do this?
System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!")
Regex.Unescape method documentation
Hans's code, improved version.
- Made it use StringBuilder - a real performance booster on long strings
Made it an extension method
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(); } }
Following methods are same as javascript escape/unescape functions:
Microsoft.JScript.GlobalObject.unescape();
Microsoft.JScript.GlobalObject.escape();
精彩评论