[c#]正则表达式快速迭代 MatchCollection 指数

发布时间: 2017/2/28 23:13:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如何可以循环访问每个 MatchCollection Index 属性 Match 最有效?我有很多 Regex 我的代码中的对象,我需要遍历所有 Match 指数 VS 事件探查器中但我却认为一个简单的 Linq 查询

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

和内部函数︰

IEnumerator.MoveNext()

时间的几乎一半的执行时间。有一些硬编码的方式这是吗?也许指针跳通过内部结构或一些其他的方法来避免 IEnumerable<T> 吗?

解决方法 1:

正如已经指出,@L.B 你的 Linq 表达式是延迟执行。那就是,如果您遍历每一步你 MatchCollection 你 Regex 将执行提供下 Match 这是最有可能的性能损失你观察。

实际上, Regex 都很沉重。但也有一些调整,你可以以提高性能 (见 Regex 最佳做法)。

你可能想要尝试是应用编译 Regex :

Regex comp10 = new Regex(pattern, RegexOptions.Compiled);
官方微信
官方QQ群
31647020