2013-02-13 4 views
5

대괄호로 묶인 단어를 일치시키고 나누기위한 올바른 정규식 구문을 찾으려고합니다. 정규식은 이중 대괄호로 묶인 단어와 일치합니다.

const string originalString = "I love to [[verb]] while I [[verb]]."; 

나는
var arrayOfStrings = Regex.Split(originalString,@"\[\[(.+)\]\]"); 

을 시도하지만 제대로 작동하지 않았다. 나는 내가 그 당신이 필요하다고 생각 때문에

arrayOfStrings[0] = "I love to " 
arrayOfStrings[1] = "[[verb]]" 
arrayOfStrings[2] = " while I " 
arrayOfStrings[3] = "[[verb]]" 
arrayOfStrings[4] = "." 

답변

8

처럼 다가올 arrayOfStrings 싶습니다 내가 잘못

하고있는 중이 야 모르겠어요.

string input = "I love to [[verb]] while I [[verb]]."; 
string pattern = @"(\[\[.+?\]\])"; 

string[] matches = Regex.Split(input, pattern); 

foreach (string match in matches) 
{ 
    Console.WriteLine(match); 
} 
+0

이렇게하면 사용자가 원하는 것이 아닌 괄호로 묶인 단어가 제거됩니다. – JDB

+0

Cyborgx37, 대괄호는 제거되지 않습니다. 로렌스 버크 (Laurence Burke)가 요구 한 것과 정확히 일치 할 것입니다. –

+0

정확합니다. 내 실수 - 명확하게 Regex.Split 함수를 오해했습니다. 불행히도, 내 downvote 제거하려고하면 오류 메시지가 나타납니다. – JDB

3

정확하게 원하는 것을 만들어 낼 답변은 @"(?=\[\[.*?\]\])|(?<=\]\])"입니다.

여기에는 두 부분이 있으며 | "또는"기호로 구분됩니다.

(?=\[\[.*?\]\]) 즉시 [[ 일부 문자 및 ]], 분할 그것을 inbetween과 [ 뒤에 어떤 기호를 찾습니다.

(?<=\]\])은 바로 앞에 ]]이 표시되고 ] 바로 뒤에있는 기호를 찾습니다.

이들을 "lookahead"및 "lookbehind"라고하며, 이들 중 더 많은 변형을 찾을 수 있습니다. here.

+0

+1이 상황에서 사용하는 좀 더 관련성이 높은 이름은 "제로 너지 어설 션"이라고 생각합니다. – JDB

+0

@ Cyborgx37 - 전 그 용어를 들어 본 적이 없었습니다. 공식적인 용어가 있다는 것을 알면 좋습니다! – Bobson

관련 문제