0

これが私の疑似テンプレートです

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で文字列テンプレートを解析するための最良かつ簡単な方法について簡単に説明してください。ありがとう

私はRegExで簡単な解決策を得ました

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);
 }
 }
4

4 に答える 4

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);

いいえ?

于 2012-12-05T10:24:52.337 に答える
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);
于 2012-12-05T10:28:46.737 に答える
0

単純すぎるかもしれませんが、この種のタスクでは、常にString.ReplaceをC#で使用していました。

于 2012-12-05T10:25:01.493 に答える
0

最も簡単なオプションは、指定子に対して文字列の置換を行うことです。ただし、ここでの問題は、事前に指定子を知っている必要があることです。

より複雑なプロセスは、テンプレートを文字列として読み取り、トークン化することです。各文字を処理し、パーサーが使用できるトークンを発行します。実際には、ごくわずかで、通常の文字列文字、いくつかの空白文字、およびトークンの開始/終了ペアがあります。

指定者の開始トークンに到達するまでトークンをかき回し続け、次に指定者の終了トークンまでのすべてをトークン名として記録します。放出されたすべてのトークンを処理するまで、すすぎ、繰り返します。

指定子のコレクションを解析したら、最初のアイデアのように、それらに対して文字列の置換を行うことができます。または、文字列のどこに指定子があるか、つまりオフセットと長さを記録する場合は、単純に切り取って、置換値を挿入できます。

于 2012-12-05T10:25:21.930 に答える