2012-12-11 10 views
3

공백 사이의 문장에서 단어를 찾고 싶습니다. 전에 내 검색 단어가 지금이 정규식 "(?:^|\S*\s*)\S*" + searchword + "\S*(?:$|\s*\S*)"example공백 사이의 단어를 찾으려면 정규식

입니다 그러나 이것은 시작과 끝에서 저에게 여분의 단어를 제공하는 경우

This is anexampleof what I wantanexampleof를 반환해야합니다 검색어 후 첫 공간까지 그래서 단어 . '이것은 내가 원하는 것의 예입니다'-> returns는 '무엇이 아닌가?'

정규식을 변경하려고했지만 전혀 좋지 않습니다. C#을 사용하고 있습니다. Thx는 도움을 요청합니다.

전체 C# 코드 :

MatchCollection m1 = Regex.Matches(content, @"(?:^|\S*\s*)\S*" + searchword + @"\S*(?:$|\s*\S*)", 
           RegexOptions.IgnoreCase | RegexOptions.Multiline); 
+0

좋아요, 콘텐츠가 여기에 있다면 어떻게 될까요? '이것은 내가 원하는 것의 모범이다.'또는'이것은 내가 원하는 것의 예이다.'또는'이것은 내가 원하는 것의 예다. ' 예상 출력이 무엇인지 각각을 보여줄 수 있습니까? 당신이 말할 수 있다면 그것은 간단했을 것입니다, 나는 내 키워드를 포함하는 단어가 필요합니까? 키워드가 두 단어 사이에 포함되지 않으면 무엇을 기대합니까? :) 내가 틀렸다면 나를 바로 잡아라. – bonCodigo

+1

N.B. '+ searchword +'를 ['+ Regex.Escape (searchword) +'] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape.aspx)로 대체하십시오. 특수 정규식 문자를 전달하는 사용자에 대해 걱정하지 않아도됩니다. – Rawling

답변

3

당신은 단순히 말에 비 캡처 그룹을 남길 수 있습니다 :

각에 많은 비 공백 문자를 얻을 것이다 탐욕하기 때문에
@"\S*" + searchword + @"\S*"; 

가능한 한 측면.

또한 캡처하지 않는 그룹의 아이디어는 일치 항목에 포함되지 않습니다. 그들이하는 모든 작업은 하위 경기 캡처를 생성하지 않는 것입니다. 당신이 무언가가 있는지 확인하고 싶었지만 경기를 포함하지 않는 경우 lookarounds을 원하는 :

@"(?<=^|\S*\s*)\S*" + searchword + @"\S*(?=$|\s*\S*)" 

그러나 \s*\S*이 만족하기 때문에 정말,이 경우에는 아무것도하지 않는이 lookarounds 빈 문자열 (*이 두 문자를 선택적으로 만들기 때문에). 그러나 더 많은 참고를 위해서 ... 당신이 경기의 경계에서 주장을하고 싶다면, 경기의 일부가되어서는 안됩니다 ... lookaround가 갈 길입니다.

+0

그것도 그렇게하는 것처럼 보입니다. 이제 나 자신을 더 테스트했다. 그리고 나는 이것을 또한 작동하는 것으로 발견했다. 그러나 나는 당신의 솔루션이 더 간단하다고 생각한다 : MatchCollection m1 = Regex.Matches (content, @ "(? :^| \ S * \ s *)"+ searchword + "(? : $ | \ s * \ S *)", RegexOptions.IgnoreCase | RegexOptions.Multiline); 고마워! – PitAttack76

+0

@ Stieven76 입력이 '내가 원하는 것의 예'라면 마지막 패턴은 '예'를 반환합니다. –

관련 문제