2010-04-07 7 views
0

입력 문자열 "23x + y-34 x + y + 21x - 3y2-3x-y + 2"입니다. 나는 공백으로 모든 '+'와 '-'문자를 둘러싸고 싶다. 그러나 그것들이 왼쪽이나 오른쪽에서 모두 이미 sourrounded되지 않은 경우에만. 그래서 내 입력 문자열은 "23x + y - 34 x + y + 21x - 3y2 - 3x - y + 2"와 같이 보일 것입니다.한 번에이 정규식을 쓸 수 있습니까?

Regex reg1 = new Regex(@"\+(?!)|\-(?!)"); 
    input = reg1.Replace(input, delegate(Match m) { return m.Value + " "; }); 
    Regex reg2 = new Regex(@"(?<!)\+|(?<!)\-"); 
    input = reg2.Replace(input, delegate(Match m) { return " " + m.Value; }); 

설명 : 나는 작업 수행이 코드 작성 REG1을 // 일치 '+' '에 대한 (공백) 또는 같은 일'모든 문자가 아닌 '다음 -'

REG2 // 나는 '+'또는 일치 것만 같은 일이 '-', ''에 의해 선행되지 (공백)

대표 1, 2 단지 삽입 ""전 m.Value (일치 값)

질문 후 하나의 정규식과 하나의 대리자를 만드는 방법이 있습니까? 즉이 작업을 한 번에 수행합니까? 저는 정규 표현식을 처음 접했고 효율적인 방법을 배우고 싶습니다.

답변

6

여기에 둘러보기 또는 위임을하지 않아도됩니다. 그냥

+0

니스 사이트, ideone.com를 시도 할 것

" $1 " 

(http://ideone.com/r3Oog를 참조하십시오.)와

\s*([-+])\s* 

교체! –

+0

thx, 정규식에 새로운 오전, 그게 간단 할 수 있다는 것을 몰랐다. – dontoo

3

내가

Regex.Replace(input, @"\s*[+-]\s*", m => " " + m.ToString().Trim() + " "); 
+0

람다식이 재미 있지만 @KennyTM이 입증 한 것처럼 정규 표현식만으로이 작업을 수행 할 수있다. –

관련 문제