这是我的pesudo模板
Dear {User},
Your job finished at {FinishTime} and your file is available for download at {FileURL}.
Regards,
{Signature}
我在c#中搜索Google进行模板解析,找到了几个好的库,但这些库完全用于c 4.0版本。我正在使用c#v2.0。所以任何人都可以建议我使用任何好的库来解析c#v2.0的字符串模板。只是简单地讨论在c#2.0中解析字符串模板的最佳和简单的方法。感谢
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];
});
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program {
static void Main() {
var template = " @@3@@ @@2@@ @@__@@ @@Test ZZ@@";
var replacement = new Dictionary<string, string> {
{"1", "Value 1"},
{"2", "Value 2"},
{"Test ZZ", "Value 3"},
};
var r = new Regex("@@(?<name>.+?)@@");
var result = r.Replace(template, m => {
var key = m.Groups["name"].Value;
string val;
if (replacement.TryGetValue(key, out val))
return val;
else
return m.Value;
});
Console.WriteLine(result);
}
}
答案 0 :(得分:2)
为什么你不能只使用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);
没有
答案 1 :(得分:0)
这可能太简单了,但对于这类任务,我总是在C#中使用String.Replace
答案 2 :(得分:0)
最简单的选择是在指定符上进行字符串替换。但是问题是你必须事先知道说明符。
更复杂的过程是将模板作为字符串读入并对其进行标记。您处理每个字符并发出解析器可以使用的标记。你真的很少,你有正常的字符串字符,一些空白字符和你的令牌开始/结束对。
您希望继续搅动标记,直到您到达说明符开始标记,然后记录所有内容,直到说明符结束标记作为标记名称。冲洗并重复,直到您处理完所有发出的令牌。
一旦你解析了你的说明符集合,你就可以简单地对它们进行字符串替换,就像最初的想法一样。或者,如果您在字符串中记录了说明符所在的位置,即偏移量和长度,您可以简单地剪切并插入替换值。
答案 3 :(得分:0)
您是否考虑过使用string.Format
- 例如:
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);