2011-11-12 14 views
1

正規表現に問題があります。置き換えたい正規表現 - 文字を置換する

$ [.....]を$ {.....}に置き換えます。 '{'の前に '$'がある場所のみ。

Regex myRegex = new Regex(@"\$\[[^\]]+", RegexOptions.Multiline); 

     string myString = "voici le [contenu] de $[ma chaine de caractères] dans un contexte précis $[pour faire des essais] de remplacement"; 

     while (myRegex.Match(myString).Success) 
     { 
      Console.WriteLine(myString); 
      Console.WriteLine(""); 
      string myOudString = myRegex.Match(myString).Value+"]"; 
      Console.WriteLine("myOudString is " + myOudString); 

      string myNewString = myOudString.Replace("[", "{"); 
      myNewString = myNewString.Replace("]", "}"); 

      myString = myString.Replace(myOudString, myNewString); 
     } 

しかし、私は、特定の文字列に問題がある:

次のコードは、私が望むほとんど何。たとえば:

string myString = "Here is $[a sample [of] code] to $[replace different] character" 
私のコードが返されます

は "ここで$ {置き換える異なる}文字に$ {}コードのサンプルを{}です"。

しかし、私は返すようにしたい:

は「ここで$私は誰も私を助けることができることを願っています文字

{異なるを交換}の{コード[の]サンプル} $である

感謝。 !

+0

バランシンググループを試してください。 – UserControl

答えて

2

ネストされた括弧のための「通常の」という表現をcontrustするトリッキーです。

あなたがトンをネストの最大1つのレベルが存在すると仮定することができた場合彼はあなたのために働くべきです:

myString = Regex.Replace(myString, @"\$\[((?:\[.*?\]|.)*?)\]", "${$1}"); 
+0

ありがとう!私は決して1つのレベルを超えないだろうと思う。 – prorace

関連する問題