python, regex, чтобы найти ссылку привязки html

Мне нужно регулярное выражение в python, чтобы найти ссылку html в большом наборе html.

поэтому, если у меня есть:

<ul class="something"> <li id="li_id"> <a href="#" title="myurl">URL Text</a> </li> </ul> 

Я бы вернулся:

 <a href="#" title="myurl">URL Text</a> 

Я хотел бы сделать это с регулярным выражением, а не с красивым дизайном или с чем-то подобным. У кого-нибудь есть фрагмент, который я могу использовать для этого?

благодаря

Суп хорош для вас:

 >>> from BeautifulSoup import BeautifulSoup >>> soup = BeautifulSoup('''<ul class="something"> ... <li id="li_id"> ... <a href="#" title="myurl">URL Text</a> ... </li> ... </ul>''') 

Есть много аргументов, которые вы можете передать методу findAll ; больше здесь . В одной строке ниже вы начнете с возврата списка всех ссылок, соответствующих некоторым условиям.

 >>> soup.findAll(href='#', title='myurl') [<a href="#" title="myurl">URL Text</a>] 

Изменить: на основе комментария OP добавлена ​​информация:

Итак, скажем, вас интересуют только теги в элементах списка определенного класса <li class="li_class"> . Вы могли бы сделать что-то вроде этого:

 >>> soup = BeautifulSoup('''<li class="li_class"> <a href="#" title="myurl">URL Text</a> <a href="#" title="myurl2">URL Text2</a></li><li class="foo"> <a href="#" title="myurl3">URL Text3</a></li>''') # just some sample html >>> for elem in soup.findAll("li", "li_class"): ... pprint(elem.findAll('a')) # requires `from pprint import pprint` ... [<a href="#" title="myurl">URL Text</a>, <a href="#" title="myurl2">URL Text2</a>] 

Рецепт супа:

  1. Загрузите один файл.
  2. Поместите файл dl'd в каталог сайта-пакетов или аналогичный.
  3. Наслаждайтесь своим супом.

вы действительно не должны использовать регулярные выражения для анализа html .. когда-либо.

попробуйте beautifulsoup или lxml.

но … ты спросил. поэтому быстрая и наивная версия может выглядеть так:

 import re html = """ <ul class="something"> <li id="li_id"> <a href="#" title="myurl">URL Text</a> </li> </ul> """ m = re.search('(<a .*>)', html) if m: print m.group(1) 

Я могу придумать много способов, чтобы это сломалось.

вы можете попробовать это, так как ваше требование прост. Нет необходимости в BeautifulSoup или regex

 >>> s=""" ... <ul class="something"> ... <li id="li_id"> ... <a href="#" title="myurl">URL Text</a> ... </li> ... </ul> ... """ >>> for item in s.split("</a>"): ... if "<a href=" in item : ... print item [ item.find("<a href=") : ] + "</a>" ... <a href="#" title="myurl">URL Text</a> 

Вы можете включить проверку '<li class="li_class">' в инструкции if по желанию.