1

C# アプリケーションで正規表現を記述して "{value}" を検索し、その前のテキストへの後方参照を "[[" まで、およびその後のテキストへの別の後方参照を "]]" まで作成しようとしています。 . 例えば:

This is some text [[backreference one {value} 
backreference two]]

"[[backreference one "、"{value}"、および "\r\nbackreference two]]" に一致します。

次の修正版を試してみましたが、うまくいきませんでした。単語の境界が欠けていると思います。検索しようとしているテキストに「{」が含まれているために問題が発生している可能性があります。

\[\[(^[\{value\}]+)\{value\}(^\]\]+)\]\]

正規表現で可能かどうかはわかりませんが、一致する閉じ括弧を見つけることができれば理想的です。たとえば、次の例では "[[backreferenc[[e]] one ", "{value} "、および "ba[[ckref[[e]]rence t]]wo]]":

This is some text [[backreferenc[[e]] one {value} 
ba[[ckref[[e]]rence t]]wo]]
4

2 に答える 2

3

Regex replace で MatchEvaluatorを使用する必要があります。また、マッチを名前付きのキャプチャ グループに分割して、マッチ エバリュエーターの処理を支援することで、作業が楽になります。説明させてください。

MatchEvaluator が行うことは、C# デリゲートを使用して一致プロセスに介入し、キャプチャされた実際の一致を調べることで、一致が発生したときに置き換える必要があるものを返すことができるようにすることです。そうすれば、必要に応じてテキスト処理を行うことができます。

基本的な方法でセクションを処理する基本的な例を次に示しますが、ビジネス ロジックを追加するための構造があります。

string text = @"This is some text [[Name: {name}]] at [[Address: {address}]].";

Regex.Replace(text,
              @"(?:\[\[)(?<Section>[^\:]+)(?:\:)(?<Data>[^\]]+)(?:\]\])",
              new MatchEvaluator((mtch) =>
              {
                    if (mtch.Groups["Section"].Value == "Name")
                            return "Jabberwocky";

                  return "120 Main";

              }));

正規表現置換の結果は次のとおりです。

This is some text Jabberwocky at 120 Main.
于 2012-10-30T14:37:07.730 に答える
1

あなたの質問の最初の部分には、これを試してください:

\[\[(.*)({value})(.*)\]\]
于 2012-10-30T11:56:18.900 に答える