Regex.Replace与循环中的编译选项

Mig*_*uel 3 c# regex

早上好,

假设我有以下代码,它试图从给定列表中的每个字符串中删除任何空格:

foreach (String StrTmp in SomeList)
    Regex.Replace(StrTmp, @"\p{Z}", "", RegexOptions.Compiled)
Run Code Online (Sandbox Code Playgroud)

由于文档RegexOptions.Compiled说"这会产生更快的执行速度但会增加启动时间",我想知道这个增加的启动时间是指整个程序的启动时间还是它指的是Regex.Replace循环内每个函数调用的启动,因此使整个周期变慢.

顺便说一句......是不是有任何Regex.Remove(.,.)命令可以删除给定正则表达式的每个事件?基本上这与上面相同,但可以更短更优雅.

非常感谢你.

mik*_*kel 7

它指的是正则表达式编译时间.但是Compiled选项是为一次创建并经常使用的正则表达式设计的,因此最好在循环外部进行一次并重复使用它.

Regex theRegex = new Regex(@"\p{Z}", RegexOptions.Compiled);
foreach (String StrTmp in SomeList)
  string replacementString = theRegex.Replace(StrTmp, "");
Run Code Online (Sandbox Code Playgroud)

  • 怎么了' ?是的,静态正则表达式得到缓存,但使用编译选项可以获得30%的运行时性能优势.究竟哪个更快取决于 - http://blogs.msdn.com/b/bclteam/archive/2010/06/25/optimizing-regular-expression-performance-part-i-working-with-the-regex-class-和-regex-objects.aspx - 但除非你的主题字符串非常大,否则我认为它的差别可以忽略不计. (2认同)