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 вариант.

Другие вопросы по тегам