這是this question的後續行動哪些是首選的:Regex.Replace()或。 aRegexObject.Replace()?
前兩個答案都是正確和完整的,並在一天結束時產生完全相同的結果。但是,使用Regex對象並調用aRegex.Replace(...)方法(Joel的答案),另一個使用靜態Regex.Replace(...)方法。 (CMS的答案)。
哪種方法是首選?
在什麼情況下你會改變主意?
這是this question的後續行動哪些是首選的:Regex.Replace()或。 aRegexObject.Replace()?
前兩個答案都是正確和完整的,並在一天結束時產生完全相同的結果。但是,使用Regex對象並調用aRegex.Replace(...)方法(Joel的答案),另一個使用靜態Regex.Replace(...)方法。 (CMS的答案)。
哪種方法是首選?
在什麼情況下你會改變主意?
使用靜態實例將每次創建一個新的Regex
對象,因此最好自己實例化它。以下是我發現的使用上System.dll中反射:
public static string Replace(string input, string pattern, string replacement)
{
return new Regex(pattern, RegexOptions.None, true).Replace(input, replacement);
}
另外,如果你實例化你自己的情況下,你將能夠編譯它,以及提高用於多種用途的性能。
您可以發送RegexOptions.Compiled
的靜態Replace
重載之一,但是這是毫無意義的,將使用此標誌被實例化Regex
對象不能再被使用。
使用正則表達式對象意味着正則表達式只編譯一次,所以你得到更好的性能(你需要保存正則表達式對象)。
它不像看起來那麼低效。使用反射器進入Regex構造函數,緩存編譯後的正則表達式代碼。這可能是最耗時的部分。
我通常最初會使用Regex.Replace(),因爲它更方便,只有在存在性能問題時纔會更改。你
也可以寫擴展方法的字符串爲方便起見,如:
public static string RegexReplace(this string source, string pattern, string replacement)
{
return Regex.Replace(source, pattern, replacement);
}
反射器顯示靜態方法無論如何構造一個Regex對象。使用靜態構建自己的對象似乎沒有性能優勢。它看起來對於一次性的速記是有用的。 – 2009-01-22 21:48:40
反射器真的清楚。只能使用靜態的真正的一次性。 – 2009-01-22 20:24:02