#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. Спасибо! Я думаю, у меня никогда не будет более одного уровня.