正则表达式快速迭代MatchCollection索引

时间:2014-10-31 21:25:12

标签: c# regex linq

如何最有效地迭代每个Match的MatchCollection Index属性?我的代码中有很多Regex个对象,我需要迭代所有Match索引,但在VS分析器中我看到一个简单的Linq查询

regex.Matches(text).Cast<Match>().Select(x => x.Groups[1].Index)

和内部功能:

IEnumerator.MoveNext()

几乎占用了一半的执行时间。有没有办法对此进行硬编码?也许指针跳过内部结构或其他一些方法以避免IEnumerable<T>

1 个答案:

答案 0 :(得分:2)

正如@ L.B所说,你的Linq表达受deferred execution的约束。也就是说,如果你在每一步迭代你的MatchCollection,你的Regex将被执行以提供下一个Match,并且这很可能是你观察到的性能损失。

事实上,Regex非常沉重。但是,您可以进行一些调整以提高性能(请参阅Regexbest practices)。

您可能想要尝试的是应用已编译的Regex

Regex comp10 = new Regex(pattern, RegexOptions.Compiled);