我正在用 C# 编写各种 Telnet 客户端,我必须解析的部分内容是 ANSI/VT100 转义序列,特别是那些用于颜色和格式的转义序列(详细信息 here)。
我拥有的一种方法是找到所有代码并删除它们,因此如果需要,我可以在没有任何格式的情况下呈现文本:
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);
但是,如果由于服务器错误导致转义码不完整,则此操作失败。所以有人建议这样做,但我的 friend 警告说它可能会更慢(这个也符合我以后可能会遇到的另一个条件 (z)):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
这不仅有效,而且实际上更快并减少了对我的文本渲染的影响。有人可以向正则表达式新手解释,为什么? :)
最佳答案
你真的想两次运行正则表达式吗?没有检查(坏我)我会认为这会很好用:
public static string StripStringFormating(string formattedString)
{
return rTest.Replace(formattedString, string.Empty);
}
如果是这样,您应该会看到它的运行速度提高了两倍...
关于regex - 为什么这个正则表达式更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870/