Я пишу своего рода клиент Telnet на C #, и часть того, что я должен проанализировать, - это escape-последовательности ANSI / VT100, в частности, только те, которые используются для цвета и форматирования (подробности здесь ).
Один метод, который у меня есть, это один, чтобы найти все коды и удалить их, чтобы я мог при необходимости отобразить текст без какого-либо форматирования:
public static string StripStringFormating(string formattedString)
{
if (rTest.IsMatch(formattedString))
return rTest.Replace(formattedString, string.Empty);
else
return formattedString;
}
Я новичок в регулярных выражениях, и мне предложили использовать это:
static Regex rText = new Regex(@"\e\[[\d;]+m", RegexOptions.Compiled);
Однако это не удалось, если управляющий код был неполным из-за ошибки на сервере. Тогда это было предложено, но мой друг предупредил, что это может быть медленнее (это также соответствует другому условию (z), с которым я могу столкнуться позже):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
Это не только сработало, но и ускорило и уменьшило влияние на мой рендеринг текста. Может кто-нибудь объяснить новичку регулярного выражения, почему? :)