и снова регулярки

  • Автор темы Автор темы blud
  • Дата начала Дата начала
C#:
Развернуть Свернуть Копировать
// парсим в список
var parse = project.Variables["response"].Value;
var regex1 = new Regex(@"(?<=a\shref[^*<]+"").*?regist.*?(?="")");
var list = project.Lists["Список 1"];
regex1.Matches(parse).Cast<Match>().ToList().ForEach(m=>list.Add(m.Value.Replace("amp;", "").Trim()));

var count = list.Count;
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i <= count; i++)
    {
        var str = list[i];
        var str1 = System.Text.RegularExpressions.Regex.Match(str, @"href.*?").Value;
        if(str1 == "href")
        {
            var str2 = System.Text.RegularExpressions.Regex.Match(str, @"(?<=\w\s<a[^*<]+"").*?regist.*?$").Value.Trim();
            list.Remove(str);
            list.Add(str2);
        }
    }   
}
 
  • Оценить
Реакции: blud
Ты внимательно мой пост прочитай и посмотри какую я там регулярку указал, ты не вписываешь
все.. пипец ... уработался ..((( нужно срочно на свежий воздух... а то кофе и никотин до добра не доведут... сорри .... все верно ... ваша регулярка выбирает все как нужно .. спасибо
 
что бы не плодить новые темы:
Код:
Развернуть Свернуть Копировать
/cipmnigeriablog/" class="level1 parent"><span>CIPM Blog</span></a><div class="dropdown columns1"><div class="dropdown-bg"><div><div class="width100 column"><ul class="nav-child unstyled small level2"><li class="level2 item815"><a href="/cipmnigeriablog/index.php/home/2015-08-05-08-15-30" class="level2"><span>Blog Guidelines &amp; Policy</span></a></li></ul></div></div></div></div></li><li class="level1 item695"><a href="/cipmnigeriablog/index.php/hrpl" class="level1"><span>HRPL</span></a></li><li class="level1 item437"><a href="/cipmnigeriablog/index.php/calendar" class="level1"><span>Calendar</span></a></li><li class="level1 item734"><a href="/cipmnigeriablog/index.php/blog-forum" class="level1"><span>Forum</span></a></li><li class="level1 item158"><a href="/cipmnigeriablog/index.php/gallery" class="level1"><span>Gallery</span></a></li><li class="level1 item814"><a href="#" class="level1"><span>Jobs</span></a></li><li class="level1 item106"><a href="/cipmnigeriablog/index.php/contacts" class="level1"><span>Contacts</span></a></li><li class="level1 item816"><a href="/cipmnigeriablog/index.php/component/users/?view=registration"
как составить регулярку, что бы выдергивала только ПОСЛЕДНЮЮ ссылку?
заранее спасибо
 
а если точнее поставить задачу нужно вот что:
есть база форумов, постер переходит на каждый и парсит наличие ссылки на страницу регистрации.
есть список признаков:
Код:
Развернуть Свернуть Копировать
register\.html
register-for-forum\.html
view=registration
view=register
action=register
task=register
user-registration
want-to-join-us
registratsiya
membership
register-now
register-form
registration
registration-page
нужно выпарсить самое короткое совпадение: перед текстом href=", заканчивается текст {-Variable.mark-}..(в переменной строка из списка признаки), после текста "
регулярка (?<=href=").*?{-Variable.mark-}(?=") собирает мусор типа того, что я показал в предыдущем посте...
подскажите плизз .. как решить...
 
(?<=\w\s<a\ href).*?[regist|membership|join].*?(?=">)
 
Кхм... по идее она и должна делать все что просил. Т.е. находить в html-коде ссылку на регистрацию.
Не работает?
 
О, блин. Не те скобки поставил. Там не квадратные, а обычные надо.
Т.е. так - (?<=\w\s<a\ href).*?(regist|membership|join).*?(?=">)
 
О, блин. Не те скобки поставил. Там не квадратные, а обычные надо.
Т.е. так - (?<=\w\s<a\ href).*?(regist|membership|join).*?(?=">)
вот подскажите если несложно, (?<=\w\s<a\ href).*? эта часть регулярки что делает?? ..
а да ...самое главное... не парсит
 
Если вам надо вернуть именно ссылку, и вы работаете через браузер а не через гет запросы, то имхо проще получить данные напрямую из элемента, напимер через такой сниппет:
C#:
Развернуть Свернуть Копировать
HtmlElement he = instance.ActiveTab.FindElementByXPath("//a[contains(@href,'registers')]",0);
if (he.IsVoid) return null; // если не нашли такого элемента выйдем по ошибке
return he.GetAttribute("href"); // возвращаем значение аттрибута, в нашем случае ссылку

Если ссылка постоянно разная, то надо глянуть код страницы, всегда есть элементы за которые можно зацепиться, чтобы точно знать что мы берем то что нам надо.

P.S. И если парсить регулярками не надо привязываться к href, если он (как мы видим) может отличаться в корне,похожих ссылок на странице может быть много, надо сначала найти вариант который будет подходить для всех этих страниц, что у них у всех есть общего и в чем различия, обычно 5-10 страниц хватает чтобы это увидеть, и дальше регулярка делается чуть длиннее но она будет в 99% случаев пробивать как надо. Как вы обрисовали задачу вам уже подробнее вряд-ли кто даст ответ, т.к. для поиска динамики данных маловато.
 
Последнее редактирование:
  • Оценить
Реакции: Dimionix
вот подскажите если несложно, (?<=\w\s<a\ href).*? эта часть регулярки что делает?? ..
а да ...самое главное... не парсит
Эта чать указывается что перед искомой строкой есть: буквенный символ (\w), далее пробельный символ (\s), и следом <a href

Странно что не парсит... может не так задачу понял. :bw:

Может выложите пример кода откуда надо парсить еще раз?
Плюс несколько строк которые должны выйти в результате.
 
Всем доброго времени, такой вот вопрос :
Захожу во ВК с прокси, ВК спрашивает докажи что это ты, введи говорит недостающие цифры номера тел., ладно бы один АКК был, то проблемы не было - а АККОВ подключается много один за другим, как написать регулярку, чтобы брала в переменную по количеству цифр (или еще как) ? - ведь номера тел. разные подключаются. Выдергивать недостающие цифры с переменной, где лежит полный номер телефона.

ну видели же конечно, "Введите +7********97"

еще повторюсь с одним АККом нет проблем
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)