J'écris un client Telnet de sortes en C# et une partie de ce que j'ai à analyser sont des séquences d'échappement ANSI/VT100, spécifiquement, seulement celles utilisées pour la couleur et le formatage (détaillé here).Pourquoi cette expression régulière est-elle plus rapide?
Une méthode que j'ai un pour trouver tous les codes et les enlever, donc je peux rendre le texte sans mise en forme si nécessaire:
public static string StripStringFormating(string formattedString)
{
if (rTest.IsMatch(formattedString))
return rTest.Replace(formattedString, string.Empty);
else
return formattedString;
}
Je suis nouveau à des expressions régulières et je suggéré utilisez ceci:
static Regex rText = new Regex(@"\e\[[\d;]+m", RegexOptions.Compiled);
Cependant, cela a échoué si le code d'échappement était incomplète en raison d'une erreur sur le serveur. Alors cela a été suggéré, mais mon ami a averti qu'il pourrait être plus lent (celui-ci correspond également à une autre condition (z) que je pourrais rencontrer plus tard):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
Ce non seulement travaillé, mais était en fait plus rapide à et réduit l'impact sur mon rendu de texte. Quelqu'un peut-il expliquer à un débutant regexp, pourquoi? :)
En y repensant maintenant, qui ne fait sens, l'exécution d'une expression rationnelle sur une ligne sans matchs est le même que l'exécution d'un premier chèque à voir si cela correspond du tout. Vous obtenez le même résultat! – Nidonocu