2015-01-15 5 views
2

중간 단어가 "is"인 각 단어 사이에 한 단어 씩 정확히 3 단어로 문장을 일치시키는 정규식을 작성하려고합니다. 입력은 입력 문자열 인 경우문자열 시작 부분에 일치하지 않는 경우 정규 표현식과 일치하지 않습니다.

"This is good" 

그것은 일치하지 않아야 경우

는 예를 들어, 정규식

"This this is good" 

이 내가 지금 노력하고 무엇 일치해야한다 :

string text = "this is good"; 
string queryFormat = @"(?<pronoun>[A-Za-z0-9]+) is (?<adjective>[A-Za-z0-9]+)$"; 
Regex pattern = new Regex(queryFormat, RegexOptions.IgnoreCase); 
Match match = pattern.Match(text); 

var pronoun = match.Groups["pronoun"].Value; //Should output "this" 
var adjective = match.Groups["adjective"].Value; //should output "good" 

위의 정규식은 문자열 "는이 좋다"

0 일치

무엇이 잘못 되었나요?

+0

당신은 아마 번호와 일치하지 않습니다. [A-Za-z0-9]는 [A-Za-z]이어야합니다. – Tormod

답변

2
^(?<pronoun>[A-Za-z0-9]+) is (?<adjective>[A-Za-z0-9]+)$ 

는 Jsut는 3 개 단어가 아닌 부분 일치에 엄격한 일치 만들기 위해 ^ 시작 앵커를 추가합니다.

^ assert position at start of a line 

데모를 참조하십시오.

https://regex101.com/r/tX2bH4/18

+1

'[\ p {L} \ p {N}]'또는'\ w' 대신'[A -Za-z0-9]'에 악센트 부호가있는 문자와 같은 유니 코드 문자를 포함시킵니다. –

+0

@LucasTrzesniewski ohh !!! 고맙습니다. 정보를 기록 할 것입니다. – vks

+0

@LucasTrzesniewski OP의 코드를 기반으로 답이 나와 있기 때문에 질문에 답글을 써야합니다. – Rawling

2

라인 앵커의 시작을 추가해야합니다 (^).

string queryFormat = @"^(?<pronoun>[A-Za-z0-9]+) is (?<adjective>[A-Za-z0-9]+)$"; 
관련 문제