Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2014 08:38:29

alexandre1
От:
Зарегистрирован: 2008-07-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Небольшое регулярное выражение

Есть 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 ну никак оставляет закрывающий последний тег и все тут



Отредактировано alexandre1 (Фев. 10, 2014 08:39:08)

Офлайн

#2 Фев. 10, 2014 10:11:13

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Небольшое регулярное выражение

in:

print re.findall(ur'href="/news/+\S+\S"',text)
out:
['href="/news/12345ssde557/"']
Или я вас неправильно понял?

Офлайн

#3 Фев. 10, 2014 19:07:26

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Небольшое регулярное выражение

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>

Офлайн

#4 Фев. 11, 2014 00:27:21

alexandre1
От:
Зарегистрирован: 2008-07-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Небольшое регулярное выражение

Спасибо, помогло



Офлайн

#5 Фев. 11, 2014 23:09:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Небольшое регулярное выражение

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 - хорошее срество



Отредактировано py.user.next (Фев. 11, 2014 23:14:45)

Офлайн

#6 Фев. 12, 2014 14:47:49

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Небольшое регулярное выражение

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

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

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version