regex - 为什么这个正则表达式更快?

标签 regex ansi

我正在用 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/

相关文章:

python正则表达式下划线问题

Regexfield 不足以验证文本输入(Django 表单)

Python、Windows、Ansi——再次编码

file - D(Tango)可以读写ANSI文件吗?

C++ 项目类型 : unicode vs multi-byte; pros and cons

Java替换正则表达式的所有无效字符

正则表达式删除文件扩展名后的字符串

c - GCC 生成文件不接受 -std=c99 -lm

java - 以 ANSI 格式读取和写入文本

javascript - 为什么 (new RegExp ('[1-9]' )).test ('10' ) 返回 true?