RegEx性能优化

时间:2013-12-19 11:24:48

标签: c# regex

我有一个正则表达式,它从字符串中删除了布尔条件。我进行了一些基准测试,我发现运行这个正则表达式替换字符串1000次,需要5-11秒。我对正则表达式的表现很陌生,但这似乎很慢。

这是正则表达式:"\bAND\b|\bOR\b|""|\(|\)"

这是预期的性能,还是我可以重写我的正则表达式以提高性能。任何帮助将不胜感激

基准代码:

Regex booleanRegex = new Regex(@"\bAND\b|\bOR\b|""|\(|\)", 
RegexOptions.IgnoreCase |   RegexOptions.Compiled);
Stopwatch t = new Stopwatch();
var inputString = "AND project manager";
t.Start();
for(int i = 0; i < 1000; i++)
{
   booleanRegex.Replace(inputString,"");
}
t.Stop();
var regex = t.ElapsedMilliseconds;

regex.Dump();

2 个答案:

答案 0 :(得分:1)

你可以尝试这个,但我不确定它会产生很大的不同:

[""()]|\b(?>AND|OR)\b

这里我假设“()比AND和OR更频繁。我使用括号来避免两次评估\b

答案 1 :(得分:1)

您使用RegexOptions.Compiled了吗?如果没有,那应该会加快你的速度。只需确保只初始化Regex对象一次。