교체 "- 세계 - 안녕하세요, 안녕하세요"를C# 정규식 질문
내가 문자열의 첫 번째 인스턴스 앞에있는 문자를 대체 할 "-"
예를 그래서 "SUPERDOOPER"로 위의 교체 떠날 것 "SUPERDOOPER - - 세계 안녕하세요"를
을 지금까지 나는이있어 :
그러나 여기에는을 "-" "- - *^[^]"하는 잘못된 것입니다.
정규 표현식으로 어떻게 수행할까요?
교체 "- 세계 - 안녕하세요, 안녕하세요"를C# 정규식 질문
내가 문자열의 첫 번째 인스턴스 앞에있는 문자를 대체 할 "-"
예를 그래서 "SUPERDOOPER"로 위의 교체 떠날 것 "SUPERDOOPER - - 세계 안녕하세요"를
을 지금까지 나는이있어 :
그러나 여기에는을 "-" "- - *^[^]"하는 잘못된 것입니다.
정규 표현식으로 어떻게 수행할까요?
일치를 확인하기 위해 패턴보다 먼저 보이지만 일치하는 문자는 포함하지 않는 non-capturing group을 사용하십시오.
(^[^-]*)(?: -)
편집 : 다시 생각해 보면 조금 과장된 것 같습니다. 이 작업을하지 않겠습니까? :
^[^-]*
문자열의 시작 부분에서 대시가 아닌 문자를 모두 가져 와서 대시가 될 때까지 계속 하시겠습니까? 또는 공간을 제외해야합니까? 그렇다면 처음으로 가십시오.
그냥 할 수 없습니까?
Regex.Replace ("World - Hello World", "^ [^ -] * -", "SUPERDOOPER -");
Regex.Replace(input, @"(Hello)(-.*\1)", @"SUPERDOOPER$2");
패턴 -. (- +) ([^] +)
우선 식 대시 문자를 포함하지 않는 임의의 일련의 일치. 다음 공간이 있습니다. 두 번째 표현식은 대시와 공백으로 시작하고 일련의 하나 이상의 "모든"문자가 이어집니다.
교체 :
는 Superdooper 제공 "$ 2 Superdooper"- 당신은 긍정적 예측과 정규식을 사용하여 시도 할 수 있습니다 안녕하세요- 세계 : "^[^-]*(?= -)"
. 내가 아는 한 C#은 그것을 지원합니다. 이 정규식은 과 정확히 일치합니다. 원하는 것을 선택하십시오. 당신은 유명한 책 "Mastering Regular Expressions"에서 lookahead, look-behind 및 다른 고급 정규 표현 기법에 대해 더 자세히 알 수 있습니다.
왜 이런 식으로 문자열 연산에 정규 표현식을 사용해야한다고 생각하십니까?
이것은 간단하고 efficent입니다 :
str = "SUPERDOOPER" + str.Substring(str.IndexOf(" -"));
감사합니다. Guffa,이 해결책은 제가 함께 간 것입니다. 답장을 보내 주신 모든 분들께 감사드립니다. 나는이 게시물에서 많은 것을 배웠다. 건배! –
비 캡처 그룹하여 그룹을 생성하지 않지만 포함하는 전체 점수로 그 부분을 (그룹 # 0). 첫 번째 예제는 작동하지 않습니다. – Rorick