前两个答案都是正确和完整的,并且在一天结束时,产生完全相同的结果。但是,一个使用Regex对象并调用aRegex.Replace(...)方法(Joel的答案),另一个使用静态Regex.Replace(...)方法。 (CMS回答)。
首选哪种方法?
在什么情况下你会改变主意?
答案 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)
使用正则表达式对象意味着正则表达式只编译一次,因此您可以获得更好的性能(您需要在某处保存正则表达式对象)。