Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор HTML-страницы, С помощью регулярных выражений 
:(
    Опции темы
Competitor
Дата 7.11.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



Помогите разобраться с регулярными выражениями. каким образом с их помощью можно выделить из нижеприведенного HTML-кода нужный текст.
<ol>
...other text
         <li>
                   <a
                    href=\"
                           **
                            Нужный  текст
                       \"
                   </a>
         <li>
                   <a
                    href=\"
                           **
                            Нужный  текст
                       \"
                   </a>
................
</ol>
Прошу пример
PM MAIL WWW   Вверх
mr.DUDA
Дата 7.11.2006, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Рад бы помочь, но похоже моих познаний недостаточно. Почему-то при бОльшем чем 1 количестве строк, подходящих под регэксп, всегда возвращается самая последняя. Вот пример:
Код
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        Regex r = new Regex(@"<ol>(.*?<li>.*?<a.*?href.*?=.*?(?<needtext>.*?)</a>.*?)*(.*?)</ol>", RegexOptions.Singleline);

        string html = @"<ol>
        ...other text
                 <li>
                           <a
                            href=""
                                   **
                                    Нужный  текст 111
                               ""
                           </a>
                 <li>
                           <a
                            href=""
                                   **
                                    Нужный  текст 222
                               ""
                           </a>
        ................
        </ol>
        ";


        string v = r.Match(html).Groups["needtext"].Value;
    }
}


Как ни извращайся, всегда возвращается "Нужный текст 222"...  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
Softaz
Дата 7.11.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 3
Всего: 16



См. ниже

Это сообщение отредактировал(а) Softaz - 7.11.2006, 22:47


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Softaz
Дата 7.11.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 3
Всего: 16



Вроде получилось
Код

            Regex r = new Regex(@"(.*?<li>.*?<a.*?href.*?=.*?(?<needtext>.*?)</a>.*?)", RegexOptions.Singleline);
            string html = @"<ol>    
        ...other text    
                 <li>    
                           <a    
                            href=""    
                                   **    
                                    Нужный  текст 111    
                               ""    
                           </a>    
                 <li>    
                           <a    
                            href=""    
                                   **    
                                    Нужный  текст 222    
                               ""    
                           </a>    
        ................    
        </ol>    
        ";
            MatchCollection mc = r.Matches(html);

            foreach (Match mt in mc)
            {
                MessageBox.Show(mt.Groups["needtext"].ToString());
            }



--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Competitor
Дата 8.11.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



А как сделать так, чтобы в тексте:
string html = @"
абракадабра
<ol    
        ...other text    
                 <li>    
                           <a    
                            href=""    
                                   **    
                                    Нужный  текст 111    
                               ""    
                           </a>    
                 <li>    
                           <a    
                            href=""    
                                   **    
                                    Нужный  текст 222    
                               ""    
                           </a>    
        ................    
        </ol>    
        ";

регулярное выражение сначало откидывало бы все что находится до <ol, а уже потом все делала точно так же как в выше приведенных примерах?
Я попробывал так:
Код

Regex r = new Regex(@"<ol(.*?<li>.*?<a.*?href=.*?""(?<needtext>.*?)"">.*?</a>.*?)", RegexOptions.Singleline);

Ведь () - означают группировку, но поиск принес только один первый правильный результат. Т.е. Нужный текст 111. Как сделать так, чтобы <ol воспринимался как первый ограничительный символ для последующей группы результатов, а не как выражение, которое должно обязательно входить в каждый результат поиска.
PM MAIL WWW   Вверх
ivashkanet
Дата 8.11.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Competitor, двумя регулярными выражениями.
Сначала откидываешь все лишнее, а потом способ Softaz-а
PM MAIL WWW ICQ   Вверх
Competitor
Дата 8.11.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



Всем спасибо. Разобрался с регулярками
PM MAIL WWW   Вверх
Exception
Дата 8.11.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



mr.DUDA, Match возвращает только последнее совпадение. Тут нужно заюзать GetMatches() или Matches или как-то так и что-то в этом роде smile .
PM   Вверх
mr.DUDA
Дата 9.11.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Exception, там грабли не только с этим были (я пробовал Matches), но и с самим паттерном - нужно составить его так, чтобы нужная часть захватывалась более одного раза.


--------------------
user posted image
PM MAIL WWW   Вверх
Competitor
Дата 10.11.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 23.3.2005
Где: Tula

Репутация: -1
Всего: -1



А как реализовать логическое или?
Код

@"(.*?<li>.*?<a.*?        id=""(?<needtext>.*?)"" ИЛИ href=.*?""(?<needtext>.*?)"">            .*?</a>.*?)"

PM MAIL WWW   Вверх
mr.DUDA
Дата 11.11.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Код
@"... (id=""(?<needtext>.*?)"")|(href=.*?""(?<needtext>.*?)"">) ..."



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.