Wikipedia Infobox Parser
Я преобразовываю wiki-infobox-parser в C#, но я застрял на регулярном выражении в C#, я не получаю те же результаты в C#, как я делаю в JS.
это те.
var lists = text.match(/\{\{(order|bulleted|unbulleted|Pagelist)(.*\n)*?\}\}/g);
Я пробовал это
var matches = text.Matches(@"(\{{(plainlist|order|bulleted|unbulleted|Pagelist)(?:\{??[^\{]*?\}}))");
но, похоже, не включает все совпадения.
Редактировать: Использование собственного расширения:
private static MatchCollection Matches(this string self, string expr)
{
return Regex.Matches(self, expr, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
}
1 ответ
В вашем коде C#, text
кажется, строка, которая не имеет Matches
метод. Вам нужно использовать Regex.Matches
и фактически то же самое регулярное выражение будет работать:
var matches = Regex.Matches(text, @"{{(order|bulleted|unbulleted|Pagelist)(.*\n)*?}}")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
Если вам не нужны захваченные значения в 2 группах, используйте либо группы без записи ((?:...)
) или используйте RegexOptions.ExplicitCapture
вариант.