2011-06-13 10 views
0

나는 다음과 같은 시나리오가 :정규식 - 숫자 문자열의 교체 부분

string source1 "ABC?XYZ"; 
string source2 "DEF?PQR"; 
string replacement = "123" 
string result = Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", "$1" + replacement + "$3"); 

문제는 대체 문자열이 확장 것을 물론이다가 $ 1123 찾으려고로 파서를 혼동하는에 "S1123 $ 3" .

대체 문자열에서 요소를 구분하는 방법을 알려주시겠습니까?

감사합니다.

답변

1

문제는 당신이 "$1" + replacement + "$3"을 연결하는 경우, 그것은 "$ (1123) $ 3"준다이다. regex 파서는 1123 번째 캡처 그룹을 대체하려고하므로 아무 것도하지 않습니다. PHP의 규칙은 언어 당신에게 코드 (here 참조) 유효한 경우

,이 같은 ${n}$n 교체 참조를 변경하여 당신이 원하는 것을 수행 할 수 있습니다

string result = 
    Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", 
       "${1}" + replacement + "${3}"); 
+0

을 나는 C#을 사용하고 있습니다 - $ {n} 구문이 올바르게 작동합니다. 감사합니다. – Neilski

1

사용하여 예제 대신 $n${n}, 즉 ${1}${3} :

string result = Regex.Replace(source1, @"([A-Z]{3,})(\?+)([A-Z]{3,})", "${1}" + replacement + "${3}");