2017-04-22 6 views
0

문자열의 모든 문자열 리터럴을 자리 표시 자로 바꾸려고합니다. 예를 들어 다음 문자열이있는 경우 :Regex를 사용하여 C#에서 문자열 리터럴 바꾸기

문자열 s1 = "foo"; 문자열 s2 = "막대"; 문자열 s3 = "baz";

나는 이것을 대체 할 싶습니다

문자열 S1 = # 0 #; 문자열 s2 = # 1 #; 문자열 s2 = # 2 #;

또한 나중에 사용하기 위해 데이터 구조에서 대체 된 문자열 리터럴 { "foo", "bar", "baz"}을 보유합니다.

나는 무차별 포악한 코딩을 통해이를 수행 할 수 있습니다. 그러나 정규 표현식을 사용하여이 작업을 수행하는 좋은 방법이 있는지 궁금합니다.

내 시도했다 :

MatchCollection textConstants = Regex.Matches(text, "\".*\""); 
for (int i=0; i < textConstants.Count; i++) 
{ 
    text=text.Replace(textConstants[i].Value, "#" + i + "#"); 
}' 

이것은

+1

당신이 정규 표현식을 사용을 시도 했습니까? 문제를 푸는 데 노력을 기울이고 어디서 붙어 있는지 설명하면 사람들이 솔루션을 숟가락으로 먹이는 것보다 훨씬 많은 것을 도울 수 있습니다. – 4castle

답변

1

그리고 지금은 두 가지 문제가 있습니다

var s = "string s1 = \"foo\"; string s2 = \"bar\"; string s3 = \"baz\";"; 

var list = new List<string>(); 

var result = Regex.Replace(s, "\".*?\"", m => { list.Add(m.Value); 
               return "#" + (list.Count - 1) + "#"; }); 
+0

고마워요. 이것은 내가 바라던 대답이었습니다 –

+0

[올바르지 않습니다] (http://regexstorm.net/tester?p=%22.*%3f%22&i=string+s1+%3d+%22%5c%22foo%5c % 22 % 22 % 3b) 문자열 리터럴은 이스케이프 시퀀스를 포함 할 수 있기 때문에. –