2012-04-25 21 views
0

私は長い文字列を持っています。ここでは、 "予約語"があり、dbの値に置き換える必要があります。#regex動的マッチの問題を置き換えますか?

eg. 

string text = "You're salary for the month of ((month)) is ((salary)) 

今、私がやったことは、それぞれ、すべての予約語と一致して、私のデータセットを検索して、その値が今

Regex ex = new Regex(@"(?<=\(\().*?(?=\)\))"); 
foreach(Match match in ex.Matches(body)){   
       string valuefromset = values.FirstOrDefault(val => val.Variable == match.Value).Value; 
        var pattern = @"(("+match.Value+"))"; 
        body = Regex.Replace(body, pattern, valuefromset, RegexOptions.IgnoreCase); 
       } 
      } 

を有するものを置き換えることだった何が起こっているのか、この

text = "You're salary for the month of ((April)) is (($10000))"; 
です

私はパターンがなぜ言葉だけを取得し、タグを取得しないのか分からなかった。私は別の正規表現を使用するべきですが、特定の値を使用しますか?特定の予約語を持っていることはパターンの中で重要な意味を持つので、私はそれを使用しました。本当に何をしているのか分かりませんでした。

何か助けていただければ幸いです。ありがとう!!!

+0

何も直接関係していますが、「あなた」の代わりに「あなたがしている」の使用する必要があります。これを試してみてくださいません。 – Shimrod

+1

トークン(予約語)が文字列内に存在するかどうかは不明ですか?潜在的なトークンはたくさんありますか?それはStringBuilderの.Replaceメソッドを使用すると効率的で複雑になるようです。 – MyItchyChin

答えて

4

ザッツあなたはあなたがそれらを一致していない置き換える正規表現

var pattern = @"(("+match.Value+"))"; 
       ^^    ^^ 

でスラッシュをエスケープしていないので、あなたは、2つのグループを作成します。

var pattern = @"\(\("+match.Value+"\)\)"; 
+0

もそれを試しました。同じもの – gdubs

+0

ああ私の悪い仕事でした!私;文字列パターンを実行していて、私が閉じた括弧をしたときに "認識されないエスケープ"エラーを出していました。ありがとう!! – gdubs

関連する問題