哪个是首选:Regex.Replace()或。 aRegexObject.Replace()?

时间:2009-01-22 20:05:22

标签: c# regex

这是this question

的后续内容

前两个答案都是正确和完整的,并且在一天结束时,产生完全相同的结果。但是,一个使用Regex对象并调用aRegex.Replace(...)方法(Joel的答案),另一个使用静态Regex.Replace(...)方法。 (CMS回答)。

首选哪种方法?
在什么情况下你会改变主意?

3 个答案:

答案 0 :(得分:6)

使用静态实例每次都会创建一个新的Regex对象,因此最好自己实例化它。这是我在System.dll上使用Reflector找到的:

public static string Replace(string input, string pattern, string replacement)
{
    return new Regex(pattern, RegexOptions.None, true).Replace(input, replacement);
}

另外,如果您实例化自己的实例,您也可以编译它并提高多次使用的性能。

可以RegexOptions.Compiled发送到其中一个静态Replace重载,但这没有意义,因为将使用此标志实例化的Regex对象不能再次使用。

答案 1 :(得分:2)

它看起来并不像效率低。使用反射器进入Regex构造函数,它会缓存已编译的正则表达式代码。这可能是最耗时的部分。

我最初通常会使用Regex.Replace(),因为它更方便,只有在出现性能问题时才会更改。

为方便起见,您也可以在字符串上编写扩展方法,例如:

public static string RegexReplace(this string source, string pattern, string replacement)
{
    return Regex.Replace(source, pattern, replacement);
}

答案 2 :(得分:1)

使用正则表达式对象意味着正则表达式只编译一次,因此您可以获得更好的性能(您需要在某处保存正则表达式对象)。