Уведомления

Группа в Telegram: @pythonsu

#1 Июль 8, 2013 09:13:11

inzem
От:
Зарегистрирован: 2010-07-18
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

Почему первое .*? срабатывает как жадное?

In [31]: re.search(r'<.*?categ.*?>', 'kjk<div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a></div>').group()
Out[31]: '<div class="videoss"><a class="category_title1" href="video/#agrej">'
Почему выводит не так ?
<a class="category_title1" href="video/#agrej">'



Офлайн

#2 Июль 8, 2013 09:29:58

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

Зачем парсить html регулярными выражениями? Есть добрый lxml (или xml, если документ небольшой). По xml есть даже глава в Бизли Д. “Python. Подробный справочник”. Книга, кстати, на русском :)



Офлайн

#3 Июль 8, 2013 09:36:48

inzem
От:
Зарегистрирован: 2010-07-18
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

Спортивный интерес :)
Не понятно почему не работает.



Офлайн

#4 Июль 8, 2013 09:44:25

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

Не жадное регулярное выражение

Видимо, это связано с механизмом реализации регулярных выражений, есть такая книжка http://www.books.ru/books/regulyarnye-vyrazheniya-3-e-izdanie-fail-pdf-626982/?show=1, думаю там это всё объяснено хорошо.

Офлайн

#5 Июль 8, 2013 09:50:44

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

lorien
Книга очень хорошая. Лучшая, я бы сказал, в своей области.



Офлайн

#6 Июль 8, 2013 09:58:57

inzem
От:
Зарегистрирован: 2010-07-18
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

In [51]: re.search(r'<.*categ.*?>', 'kjk<div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a></div>').group()
Out[51]: '<div class="videoss"><a class="category_title1" href="video/#agrej">'
Жадное и не жадное работает одинаково :(



Офлайн

#7 Июль 8, 2013 10:00:40

inzem
От:
Зарегистрирован: 2010-07-18
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

4kpt
lorienКнига очень хорошая. Лучшая, я бы сказал, в своей области.
Спасибо
Только демо версия…



Офлайн

#8 Июль 8, 2013 11:03:01

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

Не жадное регулярное выражение

4kpt
Зачем парсить html регулярными выражениями? Есть добрый lxml (или xml, если документ небольшой).
xml - для разбора правильного xml-кода, а html-код не обязан являться правильным xml-кодом

inzem
Почему первое .*? срабатывает как жадное?
странное поведение, не должно такого быть, независимо от того, ищет ли оно слева направо или справа налево



Отредактировано py.user.next (Июль 8, 2013 11:05:27)

Офлайн

#9 Июль 8, 2013 11:19:03

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

Не жадное регулярное выражение

Нормальное поведение.

>>> re.search(r'<.*?categ.*?>', 'kjk<div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a><a class="category_title1" href="video/#agrej">w3rtwq3t</a></div>').group()
'<div class="videoss"><a class="category_title1" href="video/#agrej">'
>>> re.search(r'<.*categ.*?>', 'kjk<div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a><a class="category_title1" href="video/#agrej">w3rtwq3t</a></div>').group()
'<div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a><a class="category_title1" href="video/#agrej">'
Имхо, ‘.*’ и ‘.+’ лучше не использовать без крайней необходимости и делать шаблон как можно более конкретизированным. Или хотя бы
re.search(r'<[^<>]*categ[^<>]*>', 'kjk<div class="videoss"><div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a></div>').group()
'<a class="category_title1" href="video/#agrej">'

Офлайн

#10 Июль 8, 2013 12:34:06

inzem
От:
Зарегистрирован: 2010-07-18
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Не жадное регулярное выражение

Shaman
Нормальное поведение.
Спасибо! Буду знать.
Сам пока вышел таким способом
In [52]: re.search(r'<a.*categ.*?>', 'kjk<div class="videoss"><a class="category_title1" href="video/#agrej">w3rtwq3t</a></div>').group()
Out[52]: '<a class="category_title1" href="video/#agrej">'



Отредактировано inzem (Июль 8, 2013 12:37:00)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version