Escribo un tipo de cliente Telnet en C# y parte de lo que tengo que analizar son las secuencias de escape ANSI/VT100, específicamente, solo aquellas usadas para el color y el formato (detallado here).¿Por qué es más rápida esta expresión regular?
Un método que tengo es uno encontrar todos los códigos y eliminarlos, así que puede hacer que el texto sin formato, si es necesario:
public static string StripStringFormating(string formattedString)
{
if (rTest.IsMatch(formattedString))
return rTest.Replace(formattedString, string.Empty);
else
return formattedString;
}
Soy nuevo a las expresiones regulares y se sugirió que se use esto:
static Regex rText = new Regex(@"\e\[[\d;]+m", RegexOptions.Compiled);
Sin embargo, esto falló si el código de escape estaba incompleto debido a un error en el servidor. De manera que esto fue sugerido, pero mi amigo advirtió que podría ser más lenta (éste también coincide con otra condición (z) que podría venir a través de más adelante):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
Esto no sólo trabajado, pero era de hecho más rápido a y redujo el impacto en mi representación de texto. ¿Puede alguien explicarle a un novato de expresiones regulares, por qué? :)
Pensando en ello ahora, eso no tiene sentido, se ejecuta una expresión regular en una línea sin ninguna identidad es lo mismo que ejecutar una comprobación primero ver si coincide en absoluto. ¡Obtienes el mismo resultado! – Nidonocu