我有一个正则表达式,它从字符串中删除了布尔条件。我进行了一些基准测试,我发现运行这个正则表达式替换字符串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();
答案 0 :(得分:1)
你可以尝试这个,但我不确定它会产生很大的不同:
[""()]|\b(?>AND|OR)\b
这里我假设“()比AND和OR更频繁。我使用括号来避免两次评估\b
。
答案 1 :(得分:1)
您使用RegexOptions.Compiled
了吗?如果没有,那应该会加快你的速度。只需确保只初始化Regex对象一次。