在c#2.0中解析字符串模板的最佳且简单的方法

在c#2.0中解析字符串模板的最佳且简单的方法,c#,templates,template-engine,C#,Templates,Template Engine,这是我的pesudo模板 Dear {User}, Your job finished at {FinishTime} and your file is available for download at {FileURL}. Regards, {Signature} 我在Google上搜索c#中的模板解析,发现了几个不错的库,但这些库完全是针对C4.0版本的。我正在使用c#v2.0。所以任何人都可以向我推荐任何好的库来解析c#v2.0的字符串模板。只需简单讨论一下在c#2.0中解析字符

这是我的pesudo模板

Dear {User},

Your job finished at {FinishTime} and your file is available for download at {FileURL}.

Regards,

{Signature}
我在Google上搜索c#中的模板解析,发现了几个不错的库,但这些库完全是针对C4.0版本的。我正在使用c#v2.0。所以任何人都可以向我推荐任何好的库来解析c#v2.0的字符串模板。只需简单讨论一下在c#2.0中解析字符串模板的最佳且简单的方法。谢谢

我用正则表达式得到了一个简单的解决方案
使用系统;
使用System.Collections.Generic;
使用System.Text.RegularExpressions;
班级计划{
静态void Main(){
var template=“@@3@@@2@@@@Test ZZ@@@;
var替换=新字典{
{“1”,“值1”},
{“2”,“值2”},
{“测试ZZ”,“值3”},
};
var r=新正则表达式(“@(?+)@”);
var result=r.Replace(模板,m=>{
var key=m.Groups[“name”].Value;
字符串val;
if(替换TryGetValue(键,输出值))
返回val;
其他的
返回m.值;
});
控制台写入线(结果);
}
}

为什么不能直接使用string.format?将模板更改为:

Dear {0},

Your job finished at {1} and your file is available for download at {2}.

Regards,

{3}
并使用以下命令:

string.format(template, user, finishTime, filepath, signature);

否?

这可能太简单了,但对于这类任务,我一直使用字符串。在C#

中替换最简单的选项是只对说明符执行字符串替换。然而,这里的问题是,您必须事先了解说明符

更复杂的过程是将模板作为字符串读入并标记它。处理每个字符并发出解析器可以使用的标记。实际上,您只有很少的字符串、一些空白字符和令牌开始/结束对

您希望在到达说明符开始标记之前一直在标记中翻滚,然后记录所有内容,直到说明符结束标记作为标记名为止。冲洗并重复,直到处理完所有发出的代币


一旦解析出说明符集合,就可以像最初的想法一样简单地对它们进行字符串替换。或者,如果您记录了说明符在字符串中的位置,即偏移量和长度,您可以简单地剪切并插入替换值。

您是否考虑过使用
字符串。格式
-例如:

string template = @"Dear {0}, Your job finished at {1} and your file is available for download at {2}. Regards, {3}";

string output = string.Format(template, user, finishTime, fileUrl, signature);

您是否正在寻找一种方法,用实际值替换模板中的标记以生成输出字符串?这太复杂了,不适合堆栈溢出Q&a格式。我不知道这个问题出了什么问题,因为我得到了否定的分数。我经常看到人们非常喜欢给出否定的分数,而不是给出解决方案。好的模板引擎。替换将是非常琐碎的。假设我的购物车模板邮件,那么替换方法就有问题了。
string.format(template, user, finishTime, filepath, signature);
string template = @"Dear {0}, Your job finished at {1} and your file is available for download at {2}. Regards, {3}";

string output = string.Format(template, user, finishTime, fileUrl, signature);