а получить нужно 1 и 2 т.е. цифры и название; парсит только первое вхождение, а нужны все.
Все это дело в цикле, спарсил - записал в файл, и так пока он не закончится (т.е. не будет получено null)... а у меня парсит первое, записывает и уходит в бесконечный цикл
парсить нужно из сохраненной на диск html странички (а точнее просто txt файла с ее кодом); наверное можно просто обрезать начало строки по первое вхождение и дальше парсить? или обойтись функциями типа String, без регулярных...
если можно ответ с примером.
Последний раз редактировалось iVs.Dark; 13.08.2011 в 17:53.
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.
}
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
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.
а получить нужно 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.
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
сначала попробую способ с циклом, а если не получится то этот с массивом. хотя лучше минимум лишних действий.
Re: Можно ли через регулярки парсить данные последовательно?
Цитата:
Сообщение от iVs.Dark
сначала попробую способ с циклом, а если не получится то этот с массивом. хотя лучше минимум лишних действий.
Так ты же получаеш все равно массив значений там в Цикле ......for( тут не помню(нету под рукой студии))........
там посути тот же режекс)
так что это одно и тоже. мой просто проще.. как по мне вариант регулярна попроще ...
Re: Можно ли через регулярки парсить данные последовательно?
Код:
Match a = Regex.Match(); // тут что парсим, регулярка[, настройки]
string i = a.Groups[0].Value; // если что-то спарсилось выводим всё с маской
string m = a.Groups[1].Value; // результат из первой группы (в твоем случае ([0-9]+))
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 строк меньше чем за минуту прогнало..
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 строк меньше чем за минуту прогнало..
Единственный минус не универсальность есть будет больше элементов.
Почитай Патерны программирования. Это дружеский совет как программисту... А так все норм УДАЧИ)