2011-11-12 2 views
1

정규 표현식에 문제가 있습니다.Regex - 문자 바꾸기

$ [.....]을 $ {.....}으로 바꾸고 싶습니다. '{'앞에 '$'가있는 곳만.

다음 코드는 내가 원하는 거의 무엇 :

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합니다.

당신이 t 다음 중첩의 최대 한 단계가 있다고 가정 할 경우 까다 롭습니다 당신을 위해 일해야합니다 :

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

감사합니다. 나는 결코 한 수준을 넘지 않을 것이라고 생각합니다. – prorace