Работа с регулярными выражениями в с#

278
13 мая 2017, 17:50

У меня есть переменная типа string, там записан большой текст. У меня есть регулярное выражение Regex regex = new Regex(@"<div class=\""b-opinions-main-2__text\"">.+</div>");, которое хранится в переменной типа string. На месте .+ должен быть текст. Как мне записать .+ в переменную?

Answer 1

HTML нужно парсить с помощью соответствующих инструментов.

Теперь по существу: ту часть регулярного выражения, которую необходимо получить, нужно заключать в неэкранированные круглый скобки. (...)захватывающая группа. Есть именованные и численные захватывающие группы. Вот пример последней: допустим, есть ваша регулярка, нужно то, что находит .+ - заключаете эту часть в скобки. В коде:

Regex reg = new Regex(@"<div class=\""b-opinions-main-2__text\"">(.+)</div>");
//                                                               ^^^^
var resultaty = reg.Matches(str)                  // Находим все совпадения
                  .Cast<Match>()                  // Получаем список объектов Match
                  .Select(m => m.Groups[1].Value) // Получаем нашу подстроку из группы №1
                  .ToList();                      // Конвертируем в список.

Эта реглярка взята из ТС только как образец. В реальном коде не советую использовать. Пользуйтесь HtmlAgilityPack. Да, можно пытаться её улучшить и даже написать @"(?s)<div\s+class=""b-opinions-main-2__text"">(.+?)</div>", но и эта регулярка в один (не)прекрасный момент может дать сбой, т.к. регулярки не предназначены для парсинга HTML.

Answer 2

Необходимо использовать метод Matches, для получения всех совпадений из класса Regex

    string g = "<div class=\"b-opinions-main-2__text\">qwerty</div>";
    var regExp = new Regex("(?<=<div class=\"b-opinions-main-2__text\">).+(?=</div>)");
    var matches = regExp.Matches(g);

Тип переменной matches — MatchCollection. Данный тип не позволяет использовать LINQ методы, но можно проходить с помощью цикла foreach.

foreach (var m in matches){
    Console.WriteLine(m);
}

p.s. Либо используйтесь @, либо экранируйте кавычки, но не все сразу.

READ ALSO
Библиотека с компонентами для плеера

Библиотека с компонентами для плеера

Подскажите библиотеку с компонентами для создания музыкального плеераЧтобы там были разные кнопки переключения аудио, полоса перемотки...

234
Рендеринг Kendo-UI в Asp.Net MVC

Рендеринг Kendo-UI в Asp.Net MVC

Имеется шаблон в котором у меня в head находятся только стилиСсылки на скрипты находятся после footer

259
Как подключить Awesomium вместо WebBrowser

Как подключить Awesomium вместо WebBrowser

И сколько будет весить проект? И как все собрать в 1 файл, я так понял в папку с проектом надо добавлять кучу dll всяких

391