用简单模板系统中的内容替换标签

时间:2009-02-12 20:46:26

标签: c# regex templates replace

我正在尝试构建一个简单的“用户模板”系统,以便我的用户可以编辑RSS源项目和系统生成的电子邮件的布局,而不会弄乱视图文件等。这是我用来替换字符串中带有内容的标签的函数:

private const string URL_TAG_REGEX = @"{{(?<TagName>\w*)}}";
private static string ReplaceTags(string content, 
    Dictionary<string, object> values) {
        Regex r = new Regex(UT_TAG_REGEX);
        foreach (string tag in values.Keys) {
            content = r.Replace(content, 
                m => (m.Groups["TagName"].Value == tag ? 
                    values[tag].ToString() : string.Empty));
        }
    return content;
}

我的测试模板如下所示:

<a href="{{link}}">{{title}}</a> - {{date}}<br />
{{description}}

正在用这个渲染:

<%= UserTemplates.Render("overview_rss_item", new {
        link = item.Link,
        title = item.Title,
        date = item.PublishDate,
        description = item.Description
    }) %>

Render方法负责打开文件并将匿名对象转换为Dictionary。除了只匹配{{link}}标记外,它主要起作用。其余的将被string.Empty替换。

1 个答案:

答案 0 :(得分:0)

因为您要替换所有匹配项,并且该值不等于该标记,所以您将其替换为String.Empty。试试这个:

    foreach (string tag in values.Keys) {
        content = r.Replace(content, 
            m => (m.Groups["TagName"].Value == tag ? 
                values[tag].ToString() : m.Value));
    }