2009-03-29 2 views
3

교체 "- 세계 - 안녕하세요, 안녕하세요"를C# 정규식 질문

내가 문자열의 첫 번째 인스턴스 앞에있는 문자를 대체 할 "-"

예를 그래서 "SUPERDOOPER"로 위의 교체 떠날 것 "SUPERDOOPER - - 세계 안녕하세요"를

을 지금까지 나는이있어 :

그러나 여기에는을 "-" "- - *^[^]"하는 잘못된 것입니다.

정규 표현식으로 어떻게 수행할까요?

답변

3

일치를 확인하기 위해 패턴보다 먼저 보이지만 일치하는 문자는 포함하지 않는 non-capturing group을 사용하십시오.

(^[^-]*)(?: -) 

편집 : 다시 생각해 보면 조금 과장된 것 같습니다. 이 작업을하지 않겠습니까? :

^[^-]* 

문자열의 시작 부분에서 대시가 아닌 문자를 모두 가져 와서 대시가 될 때까지 계속 하시겠습니까? 또는 공간을 제외해야합니까? 그렇다면 처음으로 가십시오.

+0

비 캡처 그룹하여 그룹을 생성하지 않지만 포함하는 전체 점수로 그 부분을 (그룹 # 0). 첫 번째 예제는 작동하지 않습니다. – Rorick

0

그냥 할 수 없습니까?

Regex.Replace ("World - Hello World", "^ [^ -] * -", "SUPERDOOPER -");

0
Regex.Replace(input, @"(Hello)(-.*\1)", @"SUPERDOOPER$2"); 
0

패턴 -. (- +) ([^] +)

우선 식 대시 문자를 포함하지 않는 임의의 일련의 일치. 다음 공간이 있습니다. 두 번째 표현식은 대시와 공백으로 시작하고 일련의 하나 이상의 "모든"문자가 이어집니다.

교체 :

는 Superdooper 제공 "$ 2 Superdooper"- 당신은 긍정적 예측과 정규식을 사용하여 시도 할 수 있습니다 안녕하세요

0

- 세계 : "^[^-]*(?= -)". 내가 아는 한 C#은 그것을 지원합니다. 이 정규식은 과 정확히 일치합니다. 원하는 것을 선택하십시오. 당신은 유명한 책 "Mastering Regular Expressions"에서 lookahead, look-behind 및 다른 고급 정규 표현 기법에 대해 더 자세히 알 수 있습니다.

1

왜 이런 식으로 문자열 연산에 정규 표현식을 사용해야한다고 생각하십니까?

이것은 간단하고 efficent입니다 :

str = "SUPERDOOPER" + str.Substring(str.IndexOf(" -")); 
+0

감사합니다. Guffa,이 해결책은 제가 함께 간 것입니다. 답장을 보내 주신 모든 분들께 감사드립니다. 나는이 게시물에서 많은 것을 배웠다. 건배! –