Уведомления

Группа в Telegram: @pythonsu

#1 Март 19, 2013 12:06:27

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение не работает.

Имеется регулярное выражение

reg = ‘'</td><td><b>(.+)</b>d’'

имеется кусочек страницы которую нужно парсить

<TABLE width='450' class=form>
<tr><td colspan='2'><input type='hidden' name='UID' value='79'/></td></tr>
<tr><td>Депозит:</td><td><b>3.250000</b> &nbsp; &nbsp; <a title='Оплаты' class='payments rightAlignText' href=“91.241.160.3:9443/admin/index.cgi?index=2&amp;UID=79”>Оплаты</a> &nbsp; <a title='Снятие денег' class='fees rightAlignText' href=“92.341.160.3:9447/admin/index.cgi?index=3&amp;UID=79”>Снятие денег</a></td></tr>
<tr><td>Денежный счёт:</td><td>81</td></tr>

пишем texxt = re.search('</td><td><b>(.+)</b>d',r.text)
r.text - это страница полученная с сайта , тут я привел только нужный кусок

Получаем всегда результат None , причем если берем утилиту для тестирования регулярных выражений например Kiki или вводим эти данные на сайте RegExr то регулярное выражение работает и проблем с ним нету но питон упорно не хочет находить нужный результат. Забыл сказать найти нужно числа разделенные точкой в данном примере это число 3.250000
Пробовал еще вот такое выражение reg = ‘Депозит:</td><td><b>(\d+\.\d+)</b>’ тоже ничего не находит , наверное я допустил ошибку или чего то не понимаю , помогите , укажите что я делаю не так ((



Отредактировано Jeck290 (Март 19, 2013 12:07:24)

Офлайн

#2 Март 19, 2013 13:07:08

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Регулярное выражение не работает.

А

reg = "</td><td><b>(.+)</b>"
для
<TABLE width='450' class=form>
<tr><td colspan='2'><input type='hidden' name='UID' value='79'/></td></tr>
<tr><td>Депозит:</td><td><b>3.250000</b> &nbsp; &nbsp; <a title='Оплаты' class='payments rightAlignText' href=“91.241.160.3:9443/admin/index.cgi?index=2&amp;UID=79”>Оплаты</a> &nbsp; <a title='Снятие денег' class='fees rightAlignText' href=“92.341.160.3:9447/admin/index.cgi?index=3&amp;UID=79”>Снятие денег</a></td></tr>
<tr><td>Денежный счёт:</td><td>81</td></tr></b>
сработает?

Офлайн

#3 Март 19, 2013 13:59:20

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение не работает.

Нет нет , не работает (



Офлайн

#4 Март 20, 2013 01:33:03

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

Регулярное выражение не работает.

Jeck290
Имеется регулярное выражение

reg = ‘</td><td><b>(.+)</b>d’
и для чего там d в конце ?

>>> import re
>>> 
>>> s = """
... <TABLE width='450' class=form>
... <tr><td colspan='2'><input type='hidden' name='UID' value='79'/></td></tr>
... <tr><td>Депозит:</td><td><b>3.250000</b> &nbsp; &nbsp; <a title='Оплаты' class='payments rightAlignText' href=“91.241.160.3:9443/admin/index.cgi?index=2&amp;UID=79”>Оплаты</a> &nbsp; <a title='Снятие денег' class='fees rightAlignText' href=“92.341.160.3:9447/admin/index.cgi?index=3&amp;UID=79”>Снятие денег</a></td></tr>
... <tr><td>Денежный счёт:</td><td>81</td></tr>
... """
>>> 
>>> pat = r'</td><td><b>(.+)</b>'
>>> #pat = 'Депозит:</td><td><b>(\d+\.\d+)</b>'
... 
>>> m = re.search(pat, s)
>>> print(m and m.group(1))
3.250000
>>>
оба варианта работают (если d убрать)

единственное что - нужно поставить ленивую(нежадную) версию захвата
pat = r'</td><td><b>(.+?)</b>'

иначе может получиться похожая вещь:
>>> re.search(r'<(.+)>', '<b>abc</b>').group(1)
'b>abc</b'
>>>

add
заменил “ревнивую” на “ленивую”, так как ревнивая - это сверхжадная



Отредактировано py.user.next (Апрель 4, 2013 09:25:47)

Офлайн

#5 Март 20, 2013 08:19:54

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Регулярное выражение не работает.

> помогите , укажите что я делаю не так ((

Используете регулярки вместо связки lxml + xpath запросы

Офлайн

#6 Март 20, 2013 09:22:04

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение не работает.

lorien
Да если бы у меня был xml файл то да все понятно что я не так делаю а так у меня на входе html :)

py.user.next
Спасибо действительно все работает , буква d просто так залетела ))

Всем спасибо за внимание.



Офлайн

#7 Март 20, 2013 09:42:52

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

Регулярное выражение не работает.

Jeck290
Да если бы у меня был xml файл то да все понятно что я не так делаю а так у меня на входе html :)
не, дело в том, что может получиться такое:
<script>alert("</td><td><b>abc</b>")</script>
и оно найдет это дело в строке, когда должно искать только в тегах
а в lxml - нестандартном модуле - есть подмодуль lxml.html специально для html-тегов



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version