2012-12-11 3 views
1

Regex.Split() 및 Regex.Replace(); 교체 할 때 특정 데이터를 유지하는 방법은 아닙니다.대체 텍스트를 유지하면서 문자열의 텍스트를 일치 및 바꾸기

내가 문자열 [] 텍스트의 다음 줄이 있다면 (모든 후 분할)

"

using system; 
using system.blab; 
using system.blab.blabity; 

"

을 어떻게 사용하는 '모든 루프 저점을 대체 할 것이다 'to' '하지만 일치하는 전체 줄'을 사용하여 (. +;) '예를 들어. 다음과 끝 ("하지만 단지 Regex.replace는 ("사용 "없습니다");) "

<using> system; 
<using> system.blab; 
<using> system.blab.blabity; 

"

+0

첫 번째 코드 블록이 예상되는 입력 및 두 번째 코드 블록 예상 출력에 정규식을 포착? –

답변

1

이것은 당신이 아주 가까이해야합니다. 일치시키려는 모든 논리 항목에 대해 명명 된 그룹을 사용해야합니다. 이 경우 "using"이라는 문자열이 아닌 모든 것을 일치 시키려고합니다. 그런 다음 $ {yourGroupName} 표기법을 사용하여 대체 문자열에서 일치하는 항목을 참조 할 수 있습니다. RegexPixie이라는 도구를 썼는데, 입력 한대로 내용이 일치하여 라이브가 작동하는지, 작동하지 않는지 확인할 수 있습니다.

//the named group has the name "everythingElse" 
var regex = new Regex(@"using(?<everythingElse>[^\r\n]+)"); 
var content = new string [] { /* ... */ }; 

for(int i = 0; i < content[i]; i++) 
{ 
    content[i] = regex.Replace(content[i], "${everythingElse}"); 
} 
+0

"not-end-of-line"부분 뒤에 paranthesis가 있어야하지 않습니까? –

+0

예. Johny에게 감사드립니다. 그 지금 고정. – viggity

3

STR 현재 문자열이 다음

  string str = @"using system; 
      using system.blab; 
      using system.blab.blabity;"; 
      str = str.Replace("using ", "<using> "); 
경우
+2

이것은 가장 간단한 대답입니다. Regex 답변은 읽기가 어렵지만 필요한 경우 더 많이 제공합니다. – Davio

+0

감사합니다. Davio. KISS 원칙 –

+0

물론 검색 문자열의 다른 위치에서 ""를 사용하는 임의의 텍스트 입력을 바꿀 것입니다.하지만 실제로 문제가 될지 모르겠습니다. 'int usingInt = 1'과 같은 임의의 표현식은'int Int = 1'로 변경 될 것입니다. – Davio

2

Regex에서 괄호를 사용하면 해당 값을 그룹으로 저장하도록 엔진에 지시합니다. 바꾸기를 호출하면 $ n이있는 그룹을 참조 할 수 있습니다. 여기서 n은 그룹 번호입니다. 나는이 테스트를하지 않은,하지만 이런 일이 :

Regex.Replace(input, @"^using(.+;)$", "$1"); 

Read here for more info

+0

이것은 작동하지만 위의 답변은 많은 viggity가 있기 때문에 특히이 간격을 띄워 다른 것들을 유지해야 할 때 읽기가 쉽기 때문에 대답으로 선택하지 않았습니다. –

0

이 두 가지 답변이 결합되어 있습니다. 그것은 단지 검색 전체 단어를 수행 using 주위 word boundaries\b 래핑 후 다시 참조 $1

string str = @"using system; 
using system.blab; 
using system.blab.blabity;"; 

str = Regex.Replace(str, @"\b(using)\b", "<$1>"); 
관련 문제