我在课堂上有大约100个
Regex调用,每个调用覆盖文本协议中的不同类型的数据,但我有很多文件,并且基于分析正则表达式占用了我的代码的88%.
很多这类代码:
{ Match m_said = Regex.Match(line,@"(.*) said,",RegexOptions.IgnoreCase); if (m_said.Success) { string playername = ma.Groups[1].Value; // some action return true; } } { Match ma = Regex.Match(line,@"(.*) is connected",RegexOptions.IgnoreCase); if (ma.Success) { string playername = ma.Groups[1].Value; // some action return true; } } { Match ma = Regex.Match(line,@"(.*): brings in for (.*)",RegexOptions.IgnoreCase); if (ma.Success) { string playername = ma.Groups[1].Value; long amount = Detect_Value(ma.Groups[2].Value,line); // some action return true; } }
有没有办法用其他更快的解决方案取代Regex?
解决方法
对于在循环中测试的正则表达式,通常在循环之外将它们预编译并在循环内部进行测试通常会更快.
您需要首先使用各自的模式声明不同的正则表达式,并且仅在第二步中调用Match()和文本进行测试.