2013-12-19 126 views
0

我有一個正則表達式可以從字符串中去除布爾條件。我執行了一些基準測試,並且我注意到運行這個正則表達式替換一個字符串1000次需要5-11秒。我對正則表現很新,但這似乎很慢。RegEx性能優化

這裏是正則表達式:"\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

在使用之前編譯它可能會有所幫助。也取決於字符串有多大 – Ben

+0

請顯示您的基準代碼。無論您的基準測試是錯誤的,還是您運行它的文本都非常長。 – dasblinkenlight

+0

您是否多次運行過您的基準測試?可能會出現一些JIT延遲。 – driis

回答

1

你可以試試這個,但我不知道,它使一個很大的區別:

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

在這裏,我假設「()比AND和OR更頻繁,我使用括號來避免評估\b兩次

1

您是否使用RegexOptions.Compiled?如果不是,那應該給喲你加快速度。只要確保你只初始化正則表達式對象一次。