2017-02-05 13 views
0

wiki-infobox-parserをC#に変換していますが、C#の正規表現に固執しています.J#と同じ結果がC#では得られません。Wikipedia Infobox Parser

これらは1つです。

var lists = text.match(/\{\{(order|bulleted|unbulleted|Pagelist)(.*\n)*?\}\}/g); 

私はこの

var matches = text.Matches(@"(\{{(plainlist|order|bulleted|unbulleted|Pagelist)(?:\{??[^\{]*?\}}))"); 

を試してみましたが、すべての一致を含めるように見えるdoes notの。

編集: カスタム拡張使用:あなたのC#コードで

private static MatchCollection Matches(this string self, string expr) 
{ 
    return Regex.Matches(self, expr, System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
} 
+0

'var matches = Regex.Matches(text、@" {{(order | bulleted | unbulleted | Pagelist)(?* \ n)*?}} ")'を使用してみませんか? '(。* \ n)*? 'は実際に'(?s:。*?) 'に変わるはずです –

答えて

0

を、textにはMatchesメソッドを持っていない文字列であるように思われます。あなたはRegex.Matchesを使用する必要があり、実際には同じ正規表現は動作します:

var matches = Regex.Matches(text, @"{{(order|bulleted|unbulleted|Pagelist)(.*\n)*?}}") 
     .Cast<Match>() 
     .Select(m => m.Value) 
     .ToList(); 

あなたは2グループで撮影した値を必要とし、いずれかの非キャプチャグループ((?:...))を使用するか、RegexOptions.ExplicitCapture optionを使用しない場合。