2013-02-13 29 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

あなたが望むものを正確に生成する答えは@"(?=\[\[.*?\]\])|(?<=\]\])"です。

これには2つの部分があり、| "または"記号で区切られています。

(?=\[\[.*?\]\])はすぐ[[一部の文字が続く、と]]、およびそれと[わたってるしき分割されている任意のシンボルを探します。

(?<=\]\])は、直前に]]と表示され、]の直後にあるシンボルを検索します。

これらは「lookahead」と「lookbehind」と呼ばれ、それらのより多くの亜種を見つけることができますhere

+0

+1この状況で使用するより関連性の高い名前は「ゼロ幅アサーション」だと思いますが。 – JDB

+0

@ Cyborgx37 - 以前はその言葉を聞いたことがなかった。正式な用語があることを知っておいてよかった! – Bobson

関連する問題