Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Можно ли через регулярки парсить данные последовательно?

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C/C++ только в данном разделе

Ответ
 
Опции темы
Старый 13.08.2011, 17:38   #1
 Разведчик
Аватар для iVs.Dark
 
iVs.Dark на правильном путиiVs.Dark на правильном пути
Регистрация: 30.07.2011
Сообщений: 19
Популярность: 115
Сказал(а) спасибо: 34
Поблагодарили 32 раз(а) в 30 сообщениях
Отправить сообщение для iVs.Dark с помощью ICQ Отправить сообщение для iVs.Dark с помощью Skype™
 
По умолчанию Можно ли через регулярки парсить данные последовательно?

Если да, то как?

выглядит вот так:
Код:
<a href="/123-name-name-...-name" class="*"><p>text</p></a>
регулярные выражение вот такое:
Код:
<a href="/([0-9]+)-(.*?)\"(.?*)>(.*?)</a>
а получить нужно 1 и 2 т.е. цифры и название; парсит только первое вхождение, а нужны все.

Все это дело в цикле, спарсил - записал в файл, и так пока он не закончится (т.е. не будет получено null)... а у меня парсит первое, записывает и уходит в бесконечный цикл

парсить нужно из сохраненной на диск html странички (а точнее просто txt файла с ее кодом); наверное можно просто обрезать начало строки по первое вхождение и дальше парсить? или обойтись функциями типа String, без регулярных...

если можно ответ с примером.

Последний раз редактировалось iVs.Dark; 13.08.2011 в 17:53.
  Ответить с цитированием
Старый 13.08.2011, 20:44   #2
 Старший сержант
Аватар для .AsTex.
 
.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания.AsTex. блестящий пример для подражания
Регистрация: 17.04.2010
Сообщений: 200
Популярность: 1972
Сказал(а) спасибо: 95
Поблагодарили 271 раз(а) в 105 сообщениях
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Эмм, дайте угадаю,парсит последнее?
Примерно будет выглядеть так:
string regex = @"<a href=\"/([0-9]+)-(.*?)\"(.?*)>(.*?)</a>";
//тут все остальное,далее:

for( тут не помню(нету под рукой студии))
{
string link = myMatch.Groups[0].Value;//выведет ссылку
string xzche = myMatch.Groupsp[1].Value//выведет второе значение.


Могу ошибаться, тогда просто замените 0 на 1, а 1 на 2.
}
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Пользователь сказал cпасибо:
iVs.Dark (13.08.2011)
Старый 13.08.2011, 21:19   #3
 Разведчик
Аватар для iVs.Dark
 
iVs.Dark на правильном путиiVs.Dark на правильном пути
Регистрация: 30.07.2011
Сообщений: 19
Популярность: 115
Сказал(а) спасибо: 34
Поблагодарили 32 раз(а) в 30 сообщениях
Отправить сообщение для iVs.Dark с помощью ICQ Отправить сообщение для iVs.Dark с помощью Skype™
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Цитата:
Сообщение от anderwhatПосмотреть сообщение
Эмм, дайте угадаю,парсит последнее?
Примерно будет выглядеть так:
string regex = @"<a href=\"/([0-9]+)-(.*?)\"(.?*)>(.*?)</a>";
//тут все остальное,далее:

for( тут не помню(нету под рукой студии))
{
string link = myMatch.Groups[0].Value;//выведет ссылку
string xzche = myMatch.Groupsp[1].Value//выведет второе значение.


Могу ошибаться, тогда просто замените 0 на 1, а 1 на 2.
}

спасибо, попробую. на msdn там было что-то подобное, тоже в цикле, только там индекс был i.
  Ответить с цитированием
Старый 13.08.2011, 21:39   #4
Заблокирован
 Пехотинец
Аватар для fesssi
 
fesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известен
Регистрация: 14.11.2009
Сообщений: 64
Популярность: 425
Сказал(а) спасибо: 35
Поблагодарили 134 раз(а) в 56 сообщениях
Отправить сообщение для fesssi с помощью ICQ Отправить сообщение для fesssi с помощью Skype™
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Цитата:
Сообщение от iVs.DarkПосмотреть сообщение
Если да, то как?

выглядит вот так:
Код:
<a href="/123-name-name-...-name" class="*"><p>text</p></a>
регулярные выражение вот такое:
Код:
<a href="/([0-9]+)-(.*?)\"(.?*)>(.*?)</a>
а получить нужно 1 и 2 т.е. цифры и название; парсит только первое вхождение, а нужны все.

Да через Regex можно без проблем там просто Mach загоняет все с регулярки а потом иожно даже split по розделителю розобрать.
Попробуй так <a href="/123-name-name-...-name" class="*"><p>text</p></a>
Код:
<a href=\"/(.*?)\" class=\"*\"><p>text</p></a>
А потом по разделителю в массив и все. Если я правильно понял что тебя интересует только это: 123-name-name-...-name

Последний раз редактировалось fesssi; 13.08.2011 в 21:45.
  Ответить с цитированием
Пользователь сказал cпасибо:
iVs.Dark (13.08.2011)
Старый 13.08.2011, 22:14   #5
 Разведчик
Аватар для iVs.Dark
 
iVs.Dark на правильном путиiVs.Dark на правильном пути
Регистрация: 30.07.2011
Сообщений: 19
Популярность: 115
Сказал(а) спасибо: 34
Поблагодарили 32 раз(а) в 30 сообщениях
Отправить сообщение для iVs.Dark с помощью ICQ Отправить сообщение для iVs.Dark с помощью Skype™
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Цитата:
Сообщение от fesssiПосмотреть сообщение
Да через Regex можно без проблем там просто Mach загоняет все с регулярки а потом иожно даже split по розделителю розобрать.
Попробуй так <a href="/123-name-name-...-name" class="*"><p>text</p></a>
Код:
<a href=\"/(.*?)\" class=\"*\"><p>text</p></a>
А потом по разделителю в массив и все. Если я правильно понял что тебя интересует только это: 123-name-name-...-name

сначала попробую способ с циклом, а если не получится то этот с массивом. хотя лучше минимум лишних действий.
  Ответить с цитированием
Старый 13.08.2011, 23:02   #6
Заблокирован
 Пехотинец
Аватар для fesssi
 
fesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известен
Регистрация: 14.11.2009
Сообщений: 64
Популярность: 425
Сказал(а) спасибо: 35
Поблагодарили 134 раз(а) в 56 сообщениях
Отправить сообщение для fesssi с помощью ICQ Отправить сообщение для fesssi с помощью Skype™
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Цитата:
Сообщение от iVs.DarkПосмотреть сообщение
сначала попробую способ с циклом, а если не получится то этот с массивом. хотя лучше минимум лишних действий.

Так ты же получаеш все равно массив значений там в Цикле ......for( тут не помню(нету под рукой студии))........
там посути тот же режекс)
так что это одно и тоже. мой просто проще.. как по мне вариант регулярна попроще ...
  Ответить с цитированием
Старый 14.08.2011, 01:04   #7
Проверенный продавец
 Разведчик
Аватар для MCseller
 
MCseller на правильном путиMCseller на правильном пути
Регистрация: 13.07.2011
Сообщений: 6
Популярность: 156
Сказал(а) спасибо: 6
Поблагодарили 16 раз(а) в 16 сообщениях
Отправить сообщение для MCseller с помощью ICQ
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Код:
Match a = Regex.Match(); // тут что парсим, регулярка[, настройки]

string i = a.Groups[0].Value; // если что-то спарсилось выводим всё с маской
string m = a.Groups[1].Value; // результат из первой группы (в твоем случае ([0-9]+))
и т.д., и т.п.
  Ответить с цитированием
Пользователь сказал cпасибо:
iVs.Dark (14.08.2011)
Старый 14.08.2011, 08:45   #8
 Разведчик
Аватар для iVs.Dark
 
iVs.Dark на правильном путиiVs.Dark на правильном пути
Регистрация: 30.07.2011
Сообщений: 19
Популярность: 115
Сказал(а) спасибо: 34
Поблагодарили 32 раз(а) в 30 сообщениях
Отправить сообщение для iVs.Dark с помощью ICQ Отправить сообщение для iVs.Dark с помощью Skype™
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Сделал так:
Код:
            page = System.IO.File.ReadAllText("1.html");
            Regex myreg1 = new Regex("<a href="/([0-9]+)-(.*?)\"(.?*)>(.*?)</a>");
            Match myreg2 = myreg1.Match(page);
            id = myreg2.Groups[1].Value;
            name = myreg2.Groups[2].Value;
            int i = myreg2.Groups[4].Index;
            page = page.Substring(i);
работает намного быстрее чем я ожидал, файл из 15000 строк меньше чем за минуту прогнало..
  Ответить с цитированием
Старый 14.08.2011, 17:52   #9
Заблокирован
 Пехотинец
Аватар для fesssi
 
fesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известенfesssi скоро будет известен
Регистрация: 14.11.2009
Сообщений: 64
Популярность: 425
Сказал(а) спасибо: 35
Поблагодарили 134 раз(а) в 56 сообщениях
Отправить сообщение для fesssi с помощью ICQ Отправить сообщение для fesssi с помощью Skype™
 
По умолчанию Re: Можно ли через регулярки парсить данные последовательно?

Цитата:
Сообщение от iVs.DarkПосмотреть сообщение
Сделал так:
Код:
            page = System.IO.File.ReadAllText("1.html");
            Regex myreg1 = new Regex("<a href="/([0-9]+)-(.*?)\"(.?*)>(.*?)</a>");
            Match myreg2 = myreg1.Match(page);
            id = myreg2.Groups[1].Value;
            name = myreg2.Groups[2].Value;
            int i = myreg2.Groups[4].Index;
            page = page.Substring(i);
работает намного быстрее чем я ожидал, файл из 15000 строк меньше чем за минуту прогнало..

Единственный минус не универсальность есть будет больше элементов.
Почитай Патерны программирования. Это дружеский совет как программисту... А так все норм УДАЧИ)
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Как можно вернуть акк если изменили данные? Sani_kz Общение и обсуждение 7 29.04.2011 21:01
[Помогите!] Люди я на аке сижу через мазилу он сменил данные а багом через мазилу как пользоватся spen4os Общение и обсуждение 3 14.03.2011 08:35

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 12:51.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net