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>
Я хотел бы сделать это с регулярным выражением, а не с красивым дизайном или с чем-то подобным. У кого-нибудь есть фрагмент, который я могу использовать для этого?
благодаря
- Выберите как дефисную, так и невыгруженную версию термина с регулярным выражением
- Разбор названия и степени?
- Как изменить содержимое строки с помощью регулярного выражения (точно так же, как String.Replace)
- Удаление символов из списка в Python
- Regex: Как совместить последовательность символов SAME?
Суп хорош для вас:
>>> 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>]
Рецепт супа:
- Загрузите один файл.
- Поместите файл dl'd в каталог сайта-пакетов или аналогичный.
- Наслаждайтесь своим супом.
вы действительно не должны использовать регулярные выражения для анализа 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 по желанию.
- Как использовать importlib для импорта модулей из произвольных источников?
- Алгоритм добавления двух целых чисел на основе использования стандартных логических операций, таких как AND, OR, XOR, NOT
- Создавая список значений, соответствие regex COULD в Python
- Python-Regex, что здесь происходит?
- Найти последний матч с регулярным выражением python
- регулярное выражение
- Как использовать * или + с скобками в регулярных выражениях в Python?
- Установка переменных с регулярным выражением
- Апостроф внутри утверждения Python lookbehind
- Предварительное определение именных рекурсивных субпаттерсов в регулярном выражении
- Прямая косая черта в регулярном выражении Python