Найти - Пользователи
Полная версия: Регулярное выражение для парсинга тегов
Начало » Python для новичков » Регулярное выражение для парсинга тегов
1
WhiteTiger
Всем привет. Переношу с PHP на питон код, который парсил html-странички и доставал оттуда содержимое указанных свойств указанных тегов.
Вот оригинал:
preg_match_all(“#<{$tag}(?:.*){$param}?:'|\”|)(.*)(?:'|\“| |>)#iU”,$content,$matches);
Здесь в $tag может лежать “a”, а в $param - “href”. В $content - код html-странички. Выражение прекрасно работает и складывает всё что надо в $matches.
Попробовал в python сделать его аналог вот так:
r = re.compile(“<” + tag + “(?:.*)” + tags + “?:'|\”|)(*)(?:'|\“| |>)”, re.U)
Выражение работает правильно, но, если PHP-вариант из кода “…<a href='/index.php'>link</a>…” достаёт “/index.php” (без кавычек), то python - “/index.php'>link</a>….(и так до последней в коде кавычки)”. То есть он берёт на много больше текста чем нужно.
Подскажите пожалуйста, как сделать так, чтоб Python-аналог извлекал текст от первой кавычки совпадения, и до ближайшей, а не до самой последней?
P.S. И ещё не большой вопрос. Как указать re.compile() несколько флагов? Например re.U вместе с re.I.
py.user.next
WhiteTiger
который парсил html-странички и доставал оттуда содержимое указанных свойств указанных тегов
есть lxml.html

WhiteTiger
То есть он берёт на много больше текста чем нужно.
ленивая (нежадная) версия - .*?

WhiteTiger
Например re.U вместе с re.I
побитовое сложение - re.U | re.I

поставь задачу

add
заменил “ревнивая” на “ленивая”, так как ревнивая - это сверхжадная
WhiteTiger
есть lxml.html
ревнивая (нежадная) версия - .*?
побитовое сложение - re.U | re.I
Не знал, оказывается уже есть готовое решение. Большое спасибо. Именно это мне было нужно!
lorien
.*
Такими вещами лучше не баловаться. Если вы знаете, что хотите получить содиржимое внутри тэга, то как минимум это доолжно быть
[^>]*
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