Найти - Пользователи
Полная версия: Не жадное регулярное выражение
Начало » Python для экспертов » Не жадное регулярное выражение
1 2 3
inzem
Почему первое .*? срабатывает как жадное?
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">'
4kpt
Зачем парсить html регулярными выражениями? Есть добрый lxml (или xml, если документ небольшой). По xml есть даже глава в Бизли Д. “Python. Подробный справочник”. Книга, кстати, на русском :)
inzem
Спортивный интерес :)
Не понятно почему не работает.
lorien
Видимо, это связано с механизмом реализации регулярных выражений, есть такая книжка http://www.books.ru/books/regulyarnye-vyrazheniya-3-e-izdanie-fail-pdf-626982/?show=1, думаю там это всё объяснено хорошо.
4kpt
lorien
Книга очень хорошая. Лучшая, я бы сказал, в своей области.
inzem
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">'
Жадное и не жадное работает одинаково :(
inzem
4kpt
lorienКнига очень хорошая. Лучшая, я бы сказал, в своей области.
Спасибо
Только демо версия…
py.user.next
4kpt
Зачем парсить html регулярными выражениями? Есть добрый lxml (или xml, если документ небольшой).
xml - для разбора правильного xml-кода, а html-код не обязан являться правильным xml-кодом

inzem
Почему первое .*? срабатывает как жадное?
странное поведение, не должно такого быть, независимо от того, ищет ли оно слева направо или справа налево
Shaman
Нормальное поведение.
>>> 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">'
inzem
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">'
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