Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2010 15:46:45

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

Помогите составить правильное регулярное выражение.
Имеется текст такого вида:
разнообразный_текст разнообразный_текст<a href=“/projects/?category_id=61”>КАТЕГОРИЯ</a>разнообразный_текст разнообразный_текст
Необходимо получить слово КАТЕГОРИЯ из данного текста. Там, естественно, может находиться любое другое слово или фраза.
Я пишу так:

category_re = re.compile(r"""<a href="/projects/?category_id=[\d+]">(?P<category>\w+)</a>""")
description_all = r"""разнообразный_текст разнообразный_текст<a href="/projects/?category_id=61">КАТЕГОРИЯ</a>разнообразный_текст разнообразный_текст"""
cat = category_re.search(description_all)
caregory = cat.group("category")
Но получаю ошибку ‘NoneType’ object has no attribute ‘group’
Подскажите, как правильно.



Офлайн

#2 Янв. 28, 2010 15:57:40

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

Попробуй так:

m = re.search('\?category_id=\d+">(?P<category>.*)<\/a>', t)
print m.group("category")
где t - твоя строка.



Отредактировано (Янв. 28, 2010 15:58:37)

Офлайн

#3 Янв. 28, 2010 16:25:58

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

expee, не помогает.
Если это может дать какие-либо наводки, то переменную description_all получаю так:

description_all = getText(item.getElementsByTagName("description")[0].childNodes)
из рсс-ленты. Может в кодировках дело?



Офлайн

#4 Янв. 28, 2010 16:31:52

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Правильное регулярное выражение

А почему бы не попытаться загнать description еще раз в html parser.



Офлайн

#5 Янв. 28, 2010 16:41:23

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

Андрей Светлов, ну потому что это выглядит вот так:
<description><![CDATA[
Заказчик: <a href="http://www.weblancer.net/users/NBK/“>Alex Pasa (NBK)</a><br />Категория: <a href=”/projects/?category_id=9“>Дизайн сайтов</a><br />Бюджет: <b class=”unknown">?</b><br /><br />Есть сайт, с него нужно взять дизайн и подогнать под движок WorldPress.<br />
Адрес сайта после утверждения.<br />
Интересует цена работ и срок.<br />
Оплата по желанию, если местоположения исполнителя Киев возможна оплата налом.]]></description>



Офлайн

#6 Янв. 28, 2010 16:57:03

expee
От:
Зарегистрирован: 2009-12-21
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

Странно, что у тебя не работает:

>>> description_all = r"""разнообразный_текст разнообразный_текст<a href="/projects/?category_id=61">КАТЕГОРИЯ</a>разнообразный_текст разнообразный_текст"""
>>> import re
>>> m = re.search('\?category_id=\d+">(?P<category>.*)<\/a>', description_all)
>>> print m.group("category")
КАТЕГОРИЯ
>>>
Смотри, что у тебя там в этой переменной. Кодировки - врятли, т.к. в самой регулярке нет ничего на русском.



Офлайн

#7 Янв. 28, 2010 17:26:56

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Правильное регулярное выражение

Так отлично! Берем CDATA и его - в отдельный парсер. Какой-нибудь html5lib, чтобы поменьше слетал на non-wellformed html



Офлайн

#8 Янв. 28, 2010 18:41:33

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

Правильное регулярное выражение

Mutagena
Помогите составить правильное регулярное выражение.
# coding: utf-8

import re

text = r"""разнообразный_текст разнообразный_текст<a href="/projects/?category_id=61">КАТЕ ГОРИЯ 1 </a>разно<a href="/projects/?category_id=61">КАТЕ ГОРИЯ 2</a>образный_текст разнообразный_текст"""

for i in re.findall(r'category_id=\d+">(.+?)</a>', text, re.DOTALL):
print i
результат:
КАТЕ ГОРИЯ 1 
КАТЕ ГОРИЯ 2
>Оплата по желанию, если местоположения исполнителя Киев возможна оплата налом.]]
с тебя жвачка :)

Офлайн

#9 Янв. 28, 2010 19:10:09

Mutagena
От:
Зарегистрирован: 2009-10-18
Сообщения: 295
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

expee, заработало.
А как вытянуть из переменной вида:

Заказчик: <a href="http://www.weblancer.net/users/Alfeifer/">Ф. Олег (Alfeifer)</a><br />Категория: <a href="/projects/?category_id=9">Дизайн сайтов</a>, <a href="/projects/?category_id=33">Flash</a><br />Бюджет: <b class="unknown">?</b><br /><br />Для обновления дизайна наших сайтов: <noindex><a href="http://www.fxmtrade.com" target="_blank" rel="nofollow">www.fxmtrade.com</a></noindex> и <noindex><a href="http://www.fxmgroup.com" target="_blank" rel="nofollow">www.fxmgroup.com</a></noindex>, необходимы креативщики с умениеем флэш програмирования. Задача, сделать сайт более динамичным и ярким.<br /><br />Оформить надо только первую страницу всё остальное остаётся прежним. <br /><br />Прошу в Ваших предложениях указывать срок и стоимость Ваших услуг.<br />Окончательная договорённость будет осуществлена после детального рассмотрения объёма работы.
категорию и сам текст проекта?
cat = re.search('\?category_id=\d+">(?P<category>.+)<\/a>.*<br ><br />(?P<desription>)', description_all)
не работает.



Офлайн

#10 Янв. 28, 2010 19:57:59

magasoft
От:
Зарегистрирован: 2009-12-20
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное регулярное выражение

google it: beautiful soup, soupselect



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version