我正在用 C# 编写各种 Telnet 客户端,我必须解析的部分内容是 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);
这不仅有效,而且实际上更快并减少了对我的文本渲染的影响。有人可以向正则表达式新手解释,为什么?:)