gpt4 book ai didi

c# - 模板引擎实现

转载 作者:行者123 更新时间:2023-11-30 18:10:48 29 4
gpt4 key购买 nike

我目前正在构建这个小型模板引擎。它需要一个包含模板参数的字符串,以及一个“标签、值”字典来填充模板。

在引擎中,我不知道哪些标签会出现在模板中,哪些不会出现。

我目前正在字典上迭代 (foreach),解析我放入字符串构建器中的字符串,并用相应的值替换模板中的标签。

有没有更有效/更方便的方法来做到这一点?我知道这里的主要缺点是 stringbuilder 每次都完全针对每个标记进行解析,这非常糟糕......

(我也在检查,虽然没有包含在示例中,但在我的模板不再包含任何标签的过程之后。它们都以相同的方式格式化:@@tag@@)

//Dictionary<string, string> tagsValueCorrespondence;
//string template;

StringBuilder outputBuilder = new StringBuilder(template);
foreach (string tag in tagsValueCorrespondence.Keys)
{
outputBuilder.Replace(tag, tagsValueCorrespondence[tag]);
}

template = outputBuilder.ToString();

响应:

@马克:

string template = "Some @@foobar@@ text in a @@bar@@ template";
StringDictionary data = new StringDictionary();
data.Add("foo", "value1");
data.Add("bar", "value2");
data.Add("foo2bar", "value3");

输出:“value2 模板中的一些文本”

而不是:“value2 模板中的一些@@foobar@@ 文本”

最佳答案

Regex 和 MatchEvaluator 怎么样?像这样:

string template = "Some @@Foo@@ text in a @@Bar@@ template";
StringDictionary data = new StringDictionary();
data.Add("foo", "random");
data.Add("bar", "regex");
string result = Regex.Replace(template, @"@@([^@]+)@@", delegate(Match match)
{
string key = match.Groups[1].Value;
return data[key];
});

关于c# - 模板引擎实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916099/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com