正規表現 - 文字を置き換える

私は正規表現に問題があります。私は交換したい

$ [.....]から$ {.....}になります。 '{'の前に '$'がある場所のみ。

次のコードは、私が望むものとほとんど同じです:

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"

私のコードが返されます:

"$ {サンプルコードの{コード}から$ {別の文字に置き換えてください}"

しかし、私は戻ってみたい:

"ここには$ {サンプルの[の]コード}が$ {別の文字を置き換える}

誰でも私を助けてくれることを願っています。

ありがとう!

1
追加された
ビュー: 1
グループのバランスをとってみてください。
追加された 著者 UserControl,

1 答え

ネストされたかっこの「通常の」表現を委ねるのは難しいことです。

あなたがネスティングのレベルが最大であると仮定することができれば、これはあなたのために働くはずです:

myString = Regex.Replace(myString, @"\$\[((?:\[.*?\]|.)*?)\]", "${$1}");
2
追加された
ありがとうございました!私は決して1つのレベルを超えないだろうと思う。
追加された 著者 prorace,