我實際上正在優化大字符串的正則表達式轉換。至於Regex.Replace幾個電話把我插入條件調用顯著的時間 - 這是沿線高效搜索不區分大小寫的ascii子字符串
if (str.IndexOf("abc", 0, StringComparison.CurrentCultureIgnoreCase) > 0)
str1 = Regex.Replace(str, "abc...", string.Empty, RegexOptions.IgnoreCase);
令我吃驚的結果是沒有說服力的。有時更好,有時候不更好。甚至更糟。所以我測不區分大小寫的IndexOf的性能(我想也StringComparison.OrdinalIgnoreCase),並發現它可能比Regex.Match慢,即本次測試:
if(Regex.Match(str,"abc", RegexOptions.IgnoreCase).Success)...
特別是對於一個大的字符串不匹配(ASCII )string「abc」我發現Regex.Match速度快了4倍。
即使這個過程比快的IndexOf:
string s1 = str.ToLower();
if(s1.IndexOf("abc")) ...
任何人都知道一個更好的解決方案?
爲什麼你首先檢查字符串是否存在並且比替換? – Magnus
Regex.Replace是一個非常昂貴的操作,首先做一個簡單的測試是很有意義的 - 主要是在Regex根本找不到任何匹配的情況下。 –
與此同時,我編寫了一個基於ToLower變換的準解決方案。這已經有很大的幫助,因爲有多次Regex調用可以通過這種方式進行有條件的測試。 –