0

(デジタルではなく)郵送用のアプリケーションを作成したい。アイデアは、ユーザーがWordでテンプレートを作成することです(RTFで保存され、すでに.docで諦めています)。テンプレートの例(rtf)は次のとおりです。

「お誕生日おめでとう[ユーザー名]、.....」

[ユーザー名]フィールドを特定のテキストに置き換えるのは簡単です。ただし、私がやりたいのは、「[」で始まり「]」で終わるすべての文字列を効果的に見つけることです。そのため、アプリのユーザーがどのデータベースフィールドをどこに配置するかを選択できるようにすることができます。

これは私がこれまでに得たものです:

    System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox();
    string s = System.IO.File.ReadAllText(path);
    Regex regex = new Regex(@"\[.*\] ");
    rtBox.Rtf = s;
    var Matches = regex.Matches(rtBox.Rtf);
    int i = 0;
    while(i < Matches.Count) {
        MessageBox.Show(Matches[i].ToString());
        i++;
    }

ただし、このコードは期待どおりに機能しません。2つのパラメーターが1行にある場合(例:「Happybday [FirstName] [LastName]」、正規表現の一致は[* FirstName] [LastName ] *であり、2つに分かれていません。

ありがとう!

4

2 に答える 2

2

@"\[.*?\]"パターンとして使用

var arr = Regex.Matches("[FirstName] [LastName]", @"\[.*?\]")
           .Cast<Match>()
           .Select(x => x.Value)
           .ToArray();
于 2012-06-24T19:16:46.103 に答える
2

あなたの正規表現は貪欲です。可能な限り一致します。疑問符を追加することで、遅延させることができます。

\[.*?\]

詳細については、次の記事を参照してください: http://www.regular-expressions.info/repeat.html。正規表現がどのように一致するかを示す簡単なエディターが必要な場合は、これを使用できます: http://www.gskinner.com/RegExr/

于 2012-06-24T19:18:15.207 に答える