Regex - tekens vervangen

Ik heb een probleem met reguliere expressies. Ik wil vervangen

$ [.....] tot $ {.....}. Alleen waar er een '$' vóór '{'.

De volgende code doet bijna wat ik wil:

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);
        }

Maar ik heb een probleem met bepaalde snaren. Bijvoorbeeld :

string myString = "Here is $[a sample [of] code] to $[replace different] character"

Mijn code zal terugkeren:

"Hier is $ {een voorbeeld {van} code} naar $ {vervang ander} karakter".

Maar ik wil terugkeren:

"Hier is $ {een voorbeeld [van] code} naar $ {vervang ander} karakter

Ik hoop dat iemand me kan helpen.

Bedankt!

1
Probeer groepen in evenwicht te brengen.
toegevoegd de auteur UserControl, de bron

1 antwoord

Het is lastig om een ​​"reguliere" expressie voor geneste haakjes aan te tasten.

Als je kunt aannemen dat er een maximum niveau van nesten is, dan zou dit voor jou moeten werken:

myString = Regex.Replace(myString, @"\$\[((?:\[.*?\]|.)*?)\]", "${$1}");
2
toegevoegd
Dank je! Ik denk dat ik nooit meer dan één niveau zal hebben.
toegevoegd de auteur prorace, de bron