Asp.net 我需要帮助做一个正则表达式。替换为多个结果

Asp.net 我需要帮助做一个正则表达式。替换为多个结果,asp.net,regex,donut-caching,Asp.net,Regex,Donut Caching,我正在构建一个自定义页面缓存实用程序,它使用类似于{Substitution:GetNonCachedData}的语法来获取不应该缓存的数据。该解决方案与内置的功能非常相似,但没有那么灵活(我不需要),最重要的是,它允许在检索非缓存数据时会话状态可用 无论如何,我有一个方法,用{Substitution}标记中命名的静态方法的结果替换html中的标记 例如,我的页面: <html> <body> <p>This is cached</

我正在构建一个自定义页面缓存实用程序,它使用类似于
{Substitution:GetNonCachedData}
的语法来获取不应该缓存的数据。该解决方案与内置的
功能非常相似,但没有那么灵活(我不需要),最重要的是,它允许在检索非缓存数据时会话状态可用

无论如何,我有一个方法,用{Substitution}标记中命名的静态方法的结果替换html中的标记

例如,我的页面:

<html>
    <body>
      <p>This is cached</p>
      <p>This is not: {Substitution:GetCurrentTime}</p>
    </body>
</html>
变量
template
是html,其中包含需要替换的自定义标记。此方法的问题是,每次我使用更新的html更新
模板
变量时,
匹配。索引
变量不再指向正确的字符开头,因为
模板
现在添加了更多字符

我可以想出一个解决方案,通过计算字符等或其他一些古怪的方法来实现,但我首先要确保没有更简单的方法可以通过Regex对象实现这一点。有人知道怎么做吗


谢谢

您应该调用
Regex.Replace的重载,该重载接受
MatchEvaluator
委托

例如:

return SubstitutionRegex.Replace(template, delegate(Match match) {
    var group = match.Groups["method"];
    var method = group.Value;
    return (string) typeof (Substitution).GetMethod(method).Invoke(null, null);
});

不要对结果使用匹配和循环,而是将regex设置为compiled并在while循环中使用单个匹配,直到它停止匹配为止

return SubstitutionRegex.Replace(template, delegate(Match match) {
    var group = match.Groups["method"];
    var method = group.Value;
    return (string) typeof (Substitution).GetMethod(method).Invoke(null, null);
});