支持延迟评估的.Net正则表达式库

时间:2010-09-13 16:53:47

标签: .net regex lazy-evaluation

我在.Net中寻找支持延迟评估的正则表达式库。

注意:我特意寻找延迟评估(即,库,而不是立即返回文档中的所有匹配,只消耗尽可能多的文档,以确定每个请求的下一个匹配),不支持懒惰的量词 - 虽然如果它也支持惰性量词,我不会反对!

具体细节:我希望能够针对可能有数十万个正则表达式匹配的非常大的文档运行正则表达式,并使用IEnumerable<>语义迭代结果,而不必花费前期成本找到所有比赛。

理想情况下是C#中的FOSS,但唯一的要求是来自.Net 3.5应用程序的可用性。

2 个答案:

答案 0 :(得分:4)

匹配班级“NextMatch method应符合您的需求:

  

返回与结果的新匹配   为了下一场比赛,从...开始   最后一场比赛结束的位置   (在最后一个字符后面   匹配的角色)。

在Reflector中快速查看它确认了这种行为:

public Match NextMatch()
{
    if (this._regex == null)
    {
        return this;
    }
    return this._regex.Run(false, base._length, base._text, this._textbeg,
        this._textend - this._textbeg, this._textpos);
}

查看链接的MSDN参考以获取其用法示例。简而言之,流程类似于:

Match m = rx.Match(input);
while (m.Success) 
{
    // do work
    m = m.NextMatch();
}

答案 1 :(得分:2)

你确定内置的Regex类没有这样做吗?例如,Match.NextMatch()方法表明它会从它到达的位置继续......

相信如果您致电Regex.Match,它将在第一场比赛时停止,然后在您致电NextMatch时从那里继续。