Найти - Пользователи
Полная версия: регулярка, выбрать ссылки из текста
Начало » Python для новичков » регулярка, выбрать ссылки из текста
1
ilnur
>>> import re
>>> str='<a href="1.ru">11111</a>, <a href="2.ru">222222</a>'
>>> re.findall(r'<a.*>.*</a>', str)
['<a href="1.ru">11111</a>, <a href="2.ru">222222</a>']
>>>
подскажите пожалуйста, почему находится две ссылки одной строкой. Мне надо найти каждую ссылку отдельно
reclosedev
.* - очень жадный (greedy)
re.findall(r'<a[^>]*>[^<]*</a>', str)
Чтобы уменьшить его жадность:
re.findall(r'<a.*?>.*?</a>', str)
Но это не всегда спасет, поэтому правильнее задать ограничения явно:
re.findall(r'<a[^>]*>[^<]*</a>', str)

А если вспомнить о вложенных тегах, то re стоит заменить на lxml или похожее.
4kpt
reclosedev
Абсолютно согласен. Если документ небольшой можно работать с xml. Для него в Бизли Д есть даже русская дока с примерами.
py.user.next
>>> import lxml.html
>>> 
>>> s = """<a href="1.ru">11111</a>, <a href="2.ru">222222</a>"""
>>> 
>>> html = lxml.html.fromstring(s)
>>> data = [(node.attrib['href'], node.text)
...         for node in html.iterchildren('a')]
>>> print(data)
[('1.ru', '11111'), ('2.ru', '222222')]
>>>
ilnur
спасибо всем.
теперь все понятно.
Больше интересовало правильное построение регулярки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB