2013-11-02 3 views
0

정규 표현식을 사용하여 문자열을 대체하려고하지만 문자열의 이중 백 슬래시가있는 정규식의 단일 백 슬래시를 이스케이프하는 방법을 찾지 못하는 것 같습니다.단일 및 이중 백 슬래시 이스케이프

리터럴 내 캐릭터 (대로이, 텍스트 파일에서 읽고있는)

-s \"t\" 

나는

-s \"n\" 

(리터럴 문자열로 다시)로 교체 할 가장 좋은 결과를 얻었습니다

schedule = Regex.Replace(schedule, "-s\s\\\"\w\\\"", "-s \\\"n\\\""); 

중간 인수는 컴파일되지 않지만 e와 이중 백 슬래시. 그것은 어느 쪽이든 다른 쪽을 받아 들일 것이지만 둘 다 (@를 사용하는 날씨에 관계없이)는 아닙니다.

나는 정규식을 그렇게 많이 사용하지 않으므로 간단한 것일 수 있지만 꽤 고생했습니다!

감사

답변

2

정상적으로는 @을 사용하고 문제는 여기에 추가하지 않는 한 탈출을 두 번 할 필요가 있도록 \ 모두 문자열과 정규 표현식에 대한 특별한 의미를 가지고 있기 때문에 문제가 일어나고있는 내부 " 자체의 존재입니다 이스케이프 할 필요가있는 캐릭터 라인

는 다음과 같은 시도 :

schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\"""); 

@을 사용한 후, \ 문자열 내부에 특별한 의미를 가지고 있지 않지만, 한 번만 경우 이스케이프 할 필요가있다, 그래서 여전히 정규 표현식 표현 내부에 특별한 의미를 가지고 그것은 문자 그대로 필요합니다.

또한 지금은 (특별한 의미 이상이없는 \ 때문에, 당신이 그렇지 않으면 탈출 할 방법) 문자열 내부 " 탈출 ""를 사용해야합니다.

+0

죄송합니다. 컴파일되지 않습니다. –

+0

@BaliC 방금 내 대답을 편집했습니다. 편집을 확인하십시오. –

+0

고마워요, 확실히 발견되었지만 여분의 슬래시로 바뀌 었습니다. 교체 된 문자열은'-s \\ "n \\"' –

1

이 작동 : \" 당신이 C#에서 정규식 문자열 인코딩 방식에 모두 특별한 의미를 가지고 있기 때문에

var schedule = @"-s \""t\"""; 
// value is -s \"t\" 
schedule = Regex.Replace(schedule, @"-s\s\\""\w\\""", @"-s \""n\"""); 
// value is -s \"n\" 

이스케이프는 복잡하다. 검색 패턴은 C# 문자열 -s\s\\"\w\\"으로, 리터럴에 \ 및 리터럴 "을 찾도록 지시합니다 (이스케이프 처리하지 않음). 대체 문자열에서 백 슬래시를 이스케이프 할 필요가 없으므로 대체 문자열은 -s \"n\"입니다.

당신은, 물론, 대신에 그대로 문자열 (@"...")의 일반 문자열 ("...")로이 쓸 수 있지만, 방법 지저분 얻을 것입니다.

+0

감사합니다. Tim, 그 말이 맞습니다. 언젠가이 물건을 배워야 할 것입니다! –

관련 문제