Регулярное выражение — замена символов

#c# #.net #regex

#c# #.net #регулярное выражение

Вопрос:

У меня проблема с регулярными выражениями. Я хочу заменить

$ […..] на $ {…..}. Только там, где перед ‘{‘ стоит ‘$’.

Следующий код делает почти то, что я хочу :

 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:

Сложно противопоставить «регулярное» выражение вложенным скобкам.

Если вы можете предположить, что существует максимум один уровень вложенности, то это должно сработать для вас:

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

Комментарии:

1. Спасибо! Я думаю, у меня никогда не будет более одного уровня.