2012-06-04 5 views
0

문자열에서 일치하는 항목을 찾고 일치 항목에 대해 작업을 수행 한 다음 원래 일치 항목을 바꾸려고합니다.문자열의 값 바꾸기

예를 들어 문자열에서 @yahoo를 찾은 다음 앰퍼샌드 다음의 모든 항목을 첫 번째 공백과 비교하여 찾습니다. 물론 단일 문자열에서 일치하는 값이 여러 개있을 수 있으므로 각 일치에 대해 하나가됩니다.

정규식을 생각하고 있지만 첫 번째 공백 (정규 표현식?)에 대한 앰퍼샌드 다음의 모든 항목을 일치시키는 것에 대해 확실하지 않습니다. 또는 이것을하는 다른 쉬운 방법? 이를 위해

+1

당신은 예를 들어 문자열을 게시해야한다. @yahoo의 앰퍼샌드는 어디에 있습니까? – Steve

+2

'@'는 * 앰퍼샌드 * ('&')와 같은 [상업적 "at"기호 *] (http://en.wikipedia.org/wiki/At_sign)라고합니다. – dasblinkenlight

답변

4

:

정규 표현식은 @\S+ 첫 번째 공백에 앰퍼샌드 후 모든 일치 찾고.

참조 : Character Classes. 예를 들어

+0

완벽한, 감사합니다. –

0

: 문서에

string str = "@yahoo aaaa bbb"; 
string replacedStr = str.Replace("@yahoo", "replacement"); 

봐 : 이 string.Replace

0

당신이 앰퍼샌드 & 또는 심볼 @을 의미합니까?

이것은 당신이 무엇을해야한다 : &([\S\.]+)\b

나에 대한 가에서 심볼 : @([\S\.]+)\b

+0

이것은 @ yahoo.com에서는 작동하지 않습니다 (OP 요청에 따르면, 첫 번째 공백까지 모든 것을 일치시켜야합니다) – Steve

+0

@Steve Thanks. 나는 그것을 수정하여'.'도 붙잡을 수있게했다. –

1

는 C#으로 작성하는 경우는, 정규식은 아마 당신의 최선의 선택입니다. 코드는 정규 표현식 및 관련 구문을 학습을위한

MatchCollection matches = Regex.Matches(/*input*/, /*pattern*/) 
foreach (Match m in matches) 
{ 
    /*Do work here*/ 
} 

매우 간단합니다, 나는 시작하는 http://www.regular-expressions.info/tutorial.html 사용. 좋은 정보가 많고 읽기 쉽습니다.

0

하려면 string.replace를 사용해보십시오() 함수 :

String x="lalala i like being @Yahoo , my Email is [email protected]"; 

x=x.Replace("@Yahoo","@Gmail"); 

X는 이제 될 것 "랄랄라이 @gmail 인처럼, 나의 리스팅 [email protected]이다 나는";

"@Yahoo"다음의 공백을 알기 위해서는 String.IndexOf() 및 String.LastIndexOf()와 함께 location 변수를 사용하십시오.

int location=x.IndexOf("@Yahoo");//gets the location of the first "@Yahoo" of the string. 

int SpaceLoc=x.IndexOf("@Yahoo",location);// gets the location of the first white space after the first "@Yahoo" of the string. 

희망이 있습니다.

2

Regex가 올바르게 설정되었다고 가정하면 Regex.Replace의 오버로드 중 하나를 활용하여 MatchEvaluator 대리인을 포함 할 수 있습니다. MatchEvaluatorFunc<Match,string> 대리자입니다 (어떤 public string Method(Match match) 메서드가 입력으로 작동 함을 의미 함). 반환 값은 원래 문자열을 바꿀 값입니다. 검색을위한 정규 표현식은 (@\S+)입니다. "@ 기호 다음에 공백 문자가 아닌 문자 (\S)가 적어도 한 번 (+) 뒤에 오는 것을 의미합니다.

Regex.Replace(input, "(@\S+)", (match) => { /* Replace logic here. */ }) 

입력 @yahoo.com is going to be @simple for purposes of @matching.에 상기 정규식 실행 그것은 @yahoo.com, @simple@matching. (는 @matching.에 punctiation 포함 통지)에 일치한다.

희망 하시겠습니까?

+0

데이비드의 대답과 같은 문제. 이 패턴은 전체 문자열'@ yahoo.com'과 일치하지 않고 단지'@ yahoo'와 일치하지 않습니다. – Steve

+0

이것은 약간의 일을 단순화합니다. 편집을 참조하십시오 ... – SPFiredrake

+0

+1, 귀하의 패턴은 수용된 답변과 동일하지만 질문의 다른 부분에 대해서도 답변을 시도합니다. – Steve

0

RegEx.Replace가 최선의 방법이라고 생각합니다. 당신은 단순히 같은 것을 할 수 있습니다

string input = "[email protected] is my email address"; 
string output = Regex.Replace(input, @"@\S+", new MatchEvaluator(evaluateMatch)); 

그리고 당신은 그와 같이, evaluateMatch 방법을 정의해야

private string evaluateMatch(Match m) 
{ 
    switch(m.Value) 
    { 
     case "@yahoo.com": 
      return "@google.com"; 
      break; 
     default: 
      return "@other.com"; 
    } 
}