Найти - Пользователи
Полная версия: Небольшое регулярное выражение
Начало » Python для экспертов » Небольшое регулярное выражение
1
alexandre1
Есть html из него хочется убрать все ссылки по определенному признаку но почему то регулярное выражение оставляет закрывающий тег нужной ссылки:

text = """
<a href="/news/12345ssde557/">Кто то такой хорошей</a>
<div>123123</div>
<a href="site.com">site</a>
"""
text = re.sub(r'</?a[^>][href="/news/\w\d/"]*>', '', text, flags=re.IGNORECASE)
print text

На выходе получается.

<<<   Кто то такой хорошей</a>
         <div>123123</div>
         <a href="site.com">site</a>


Чтоб просто у всех ссылок достать текст легко:

text = re.sub(r'</?a[^>]*>', '', text)

а так чтоб условие в href ну никак оставляет закрывающий последний тег и все тут
noob_saibot
in:
print re.findall(ur'href="/news/+\S+\S"',text)
out:
['href="/news/12345ssde557/"']
Или я вас неправильно понял?
o7412369815963
import re
text = """
<a href="/news/12345ssde557/">Кто то такой хорошей</a>
<div>123123</div>
<a href="site.com">site</a>
"""
text = re.sub(r'<a[^>]+?href="/news/[\w\d]+/"[^>]*>([^<]*)</a>', r'\1', text, flags=re.IGNORECASE | re.DOTALL)
print text
Кто то такой хорошей
<div>123123</div>
<a href="site.com">site</a>
alexandre1
Спасибо, помогло
py.user.next
o7412369815963
text = re.sub(r'<a[^>]+?href="/news/[\w\d]+/"[^>]*>([^<]*)</a>', r'\1', text, flags=re.IGNORECASE | re.DOTALL)

1)
\d входит в \w
>>> import re
>>> re.search(r'\w+', 'abc123def').group()
'abc123def'
>>>

2)
re.DOTALL относится к точке
>>> import re
>>> re.search(r'.', '\n')
>>> re.search(r'.', '\n', re.DOTALL)
<_sre.SRE_Match object at 0x7f74e16801d0>
>>> re.search(r'[^a]', '\n')
<_sre.SRE_Match object at 0x7f74e16805e0>
>>> re.search(r'[^a]*', '\n\n\n').group()
'\n\n\n'
>>>


alexandre1
Есть html из него хочется убрать все ссылки по определенному признаку
lxml.html - хорошее срество
o7412369815963
py.user.next
\d входит в \w
Часто забываю, по мне, логичней было-бы разделение на числа и буквы.

py.user.next
re.DOTALL относится к точке
Была точка, потом убрал.

py.user.next
lxml.html - хорошее срество
Да, но для простых операций часто достаточно re, + оно будет быстрее в 100-1000 раз.
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