Форум сайта python.su
0
Привет, расковыриваю фид рутрекера. По доке начудил такое (3.2.3):
import xml.dom.minidom dom = xml.dom.minidom.parse('feed1.xml') rel = [] for release in dom.getElementsByTagName('title'): title = release.toxml() title = title.replace('<title type="html"><![CDATA', '') title = title.replace('></title>', '') rel.append(title) for x in rel: print(x, '\n')
[Помни / Память / Мементо / Memento (Кристофер Нолан /Christopher Nolan) [2000, США, Триллер, криминал, детектив, BDRip 1080p] [10th Anniversary Special Edition] Dub+MVO+DVO+AVO+Ukr+Orig(Eng)+Sub(Rus,Eng) [21.78 GB]]]
[Цыплёнок с черносливом / Poulet aux prunes / Chicken with plums (Венсан Паронно / Vincent Paronnaud, Маржан Сатрапи / Marjane Satrapi) [2011, Франция, Германия, Бельгия, драма, BDRip 1080p] Sub (rus, fre (forced)) + original (fre) [6.56 GB]]]
[Застрял в тебе / Stuck on You (Бобби Фаррелли, Питер Фаррелли / Bobby Farrelly, Peter Farrelly) [2003 г., США, комедия, драма, HDTV 1080i] DUB + DVO + original eng + sub rus, eng [9.6 GB]]]
Отредактировано Kane (Май 10, 2012 19:52:53)
Офлайн
3
ненадо циклом по каждому символу.
попробуй таки разобратся с регулярками - сушествено упрошяет жизнь с парсингом текста.
Офлайн
3
я парсил самый первый тайтл. если структура одинаковая то вроде как должно подойти и всему остальному
import re
re.search('^\[(.+?) \((.+?)\) \[(.+?)\] \[(.+?) \[(.+?)\]', text).group(5)
Офлайн
0
Попробовал, регулярка работает, с циферками понял что к чему. Осилил четверть книжки, условно сообразил, что и как она делает. Правда результат мне нужен чуть точнее, но тут я уже разберусь.
Спасибо за помощь!
Офлайн
52
Фридл написал свой талмуд немного под другой случай. Он там как бы даёт более_глубокое_понимание_регулярных_выражний. А для решение обычной задачи отлично подходит документация к модулю re в пару страниц. Советую Фридла читать для удовольствия и общего развития, а для решения задач просто посматривать в доки.
Офлайн
0
fata1ex, у меня после прочтения доки понимания, куда там коней запрягают не появилось, к сожалению.
fata1exА вместе с тем начинает с малого и всё объясняет на примерах. Очень приятно
Он там как бы даёт более_глубокое_понимание_регулярных_выражний.

fata1exКстати, получается что так и делаю. Пишет он очень грамотно и интересно (сужу по переводу изд-ва символ), можно читать как худ. лит. перед сном
Советую Фридла читать для удовольствия и общего развития
Офлайн
52
Ну чтож, каждому своё :) Хуже от прочтения хорошей книги точно не станет. Удачи в освоении.
Офлайн
0
Спасибо.
И вопрос вдогонку: в регулярки умеют что-то типа условий?
Например в начале заголовка в квадратных скобках может быть доп.информация, вот если есть, то его выкинуть. Regexp`ом такое реально описать?
Насколько я разобрался, просто проверить наличие в начале чего-нибудь в кв. скобках можно так:
Пример куска заголовка:
[[Обновлено] Воин / Warrior (Гэвин О’Коннор / Gavin O'Connor)
re.search('^\[\[(.+?)\]', x)
re.search('^\[\[', x)
re.search('\].+?\[(.+?).+?\[', y)
Отредактировано Kane (Май 13, 2012 15:56:46)
Офлайн
173
С помощью регулярок Python'a почти невозможно парсить вложенные структуры:
google://python regex nested
Офлайн
52
Не очень понятно в чем вопрос, если вы сами на него ответили.
Например в начале заголовка в квадратных скобках может быть доп.информация, вот если есть, то его выкинуть.Выкинуть заголовок или информацию? Если заголовок, то вы вроде сами написали - ищем подходящее вхождение, если находим, значит он нам не подходит. Если нужно выкинуть информацию, то просто пропускаем её или считываем, но не используем, например, так:
>>> m = re.search('\[.*?\] (?P<num>\d*)', '[ bla bla ] 12345') >>> m.group('num') '12345'
Отредактировано fata1ex (Май 13, 2012 15:33:08)
Офлайн