c# - interpolated - ¿Cómo puedo Unescape y Reescape cadenas en.net?
regex escape c# (3)
Necesito un TextBox en un control WPF que pueda tomar texto como Commit/r/n/r
(que es la cadena .net "Commit//r//n//r"
) y volver a convertirlo en "Commit/r/n/r"
como una cadena .net. Esperaba un par de métodos string.Unescape () y string.Escape (), pero no parece existir. ¿Voy a tener que escribir el mío? ¿O hay una manera más simple de hacer esto?
Código de Hans, versión mejorada.
- Hecho que use StringBuilder - un realzador de rendimiento real en cuerdas largas
Hecho un método de extensión.
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(); } }
Los siguientes métodos son los mismos que las funciones de escape / unescape de javascript:
Microsoft.JScript.GlobalObject.unescape();
Microsoft.JScript.GlobalObject.escape();
System.Text.RegularExpressions.Regex.Unescape(@"/r/n/t/t/t/t/t/t/t/t/tHello world!")