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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
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

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
Ты внимательно мой пост прочитай и посмотри какую я там регулярку указал, ты не вписываешь
все.. пипец ... уработался ..((( нужно срочно на свежий воздух... а то кофе и никотин до добра не доведут... сорри .... все верно ... ваша регулярка выбирает все как нужно .. спасибо
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
что бы не плодить новые темы:
Код:
/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"
как составить регулярку, что бы выдергивала только ПОСЛЕДНЮЮ ссылку?
заранее спасибо
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
а если точнее поставить задачу нужно вот что:
есть база форумов, постер переходит на каждый и парсит наличие ссылки на страницу регистрации.
есть список признаков:
Код:
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-}(?=") собирает мусор типа того, что я показал в предыдущем посте...
подскажите плизз .. как решить...
 

zena2015

Client
Регистрация
10.07.2015
Сообщения
44
Благодарностей
8
Баллы
8
(?<=\w\s<a\ href).*?[regist|membership|join].*?(?=">)
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28

zena2015

Client
Регистрация
10.07.2015
Сообщения
44
Благодарностей
8
Баллы
8
Кхм... по идее она и должна делать все что просил. Т.е. находить в html-коде ссылку на регистрацию.
Не работает?
 

zena2015

Client
Регистрация
10.07.2015
Сообщения
44
Благодарностей
8
Баллы
8
О, блин. Не те скобки поставил. Там не квадратные, а обычные надо.
Т.е. так - (?<=\w\s<a\ href).*?(regist|membership|join).*?(?=">)
 

blud

Client
Регистрация
19.04.2011
Сообщения
657
Благодарностей
77
Баллы
28
О, блин. Не те скобки поставил. Там не квадратные, а обычные надо.
Т.е. так - (?<=\w\s<a\ href).*?(regist|membership|join).*?(?=">)
вот подскажите если несложно, (?<=\w\s<a\ href).*? эта часть регулярки что делает?? ..
а да ...самое главное... не парсит
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
Если вам надо вернуть именно ссылку, и вы работаете через браузер а не через гет запросы, то имхо проще получить данные напрямую из элемента, напимер через такой сниппет:
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

zena2015

Client
Регистрация
10.07.2015
Сообщения
44
Благодарностей
8
Баллы
8
вот подскажите если несложно, (?<=\w\s<a\ href).*? эта часть регулярки что делает?? ..
а да ...самое главное... не парсит
Эта чать указывается что перед искомой строкой есть: буквенный символ (\w), далее пробельный символ (\s), и следом <a href

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

Может выложите пример кода откуда надо парсить еще раз?
Плюс несколько строк которые должны выйти в результате.
 

mayworkle

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

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

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

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