2013-10-03 3 views
0

먼저, 발생할 수있는 모든 맞춤법/문법 오류는 유감스럽게 생각합니다. 나는 복잡한 정규 표현식 문제를 풀려고 노력하고 있지만 어떻게해야하는지 알 수는 없다. 특정 문자열 일부를 걸러 내려고합니다. 그러나 이것은 작동합니다! 선택적인 한 줄이 있는데 두 번째 줄, 이메일입니다. 어떻게하면이 부분이 선택적이며 정규 표현식이 문자열에 있는지 여부 만 검색해야한다고 말할 수 있습니다.Regex, 현재 문자열에있는 경우에만 일치

문자열

  • [코멘트] 옹 [/127.0.0.1]
  • [코멘트] 그림자 [/127.0.0.1]
  • [코멘트] [메일] 폭시 [/127.0. 0.1]
  • [COMMENT] [EMAIL2] PerfectAim [/127.0.0.1]

내가 무엇을 시도했다

Regex regexUserCommented = new Regex(
    @"(\[COMMENT\])\ " + // COMMENT 
    @"(\[.*\]) " +  // Email, this needs to be optional but how?! 
    @"(\w(?<!\d)[\w'-]*)" // User 
); 

if (regexUserCommented.IsMatch(test)) 
{ 
    var infoMatches = regexUserCommented.Split(test); 
    Console.WriteLine(infoMatches[3]); // User 
} 

전자 메일 섹션을 선택적으로 만들 수있는 사람은 누구입니까? (정규 표현식에서 선택 사항으로, 문자열에 없다면 아무 일도하지 않아서 전자 메일 부분을 건너 뛸 수 있습니다. 내 나쁜 영어를 유감스럽게 생각합니다. :).

+1

[을'?'정량 (http://msdn.microsoft.com/en-us/library/az24scfc.aspx#quantifiers) (경기 0 번 또는 1 번). 예를 들어,'(\ [. * \])? '. – rutter

+0

@ "((\ [. * \]))) 해 보셨습니까?" –

+0

@rutter 이것은 atm :)로 동작하지만, 어떻게'var infoMatches = regexUserCommented.Split (test);'의 결과에서 제외시킬 수 있습니까? 죄송합니다 모든 질문> :. –

답변

0

사용 그룹 ... 당신은 아마 원하는

Regex regexUserCommented = new Regex(
    @"(\[COMMENT\])\ " + // COMMENT 
    @"((\[.*\]))?" +  // Email, this needs to be optional but how?! 
    @"(\w(?<!\d)[\w'-]*)" // User 
); 

var match = regexUserCommented.Match(test); 

if (match.Groups.Count == 5) 
{ 
    Console.WriteLine("==> {0}", match.Groups[4].Value); 
} 
else 
{ 
    Console.WriteLine("==> Not matched"); 
} 
+0

네, 답변을 게시하지 않아서 죄송합니다. 문제가 해결되면 답변을 수락합니다. :) –