Регулярное выражение Python для получения не http (s) URL-адресов из тега <a>из html-содержимого - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь получить URL-адреса, не относящиеся к http (s), из тега привязки.Мне нужно сопоставить весь тег привязки, если такой URL-адрес найден.

Пример:

Это должно соответствовать: <a href="example.com/index.html"> bla</a>

Это не должно совпадать: <a href="https://www.google.com/">bla2 </a>

Мне уже удалось построить это регулярное выражение:

(\<a[\s\S]*?)(?<=href)(?:(=[\"\'])|(=))(?!(http[s]?)|(ww[w]?)|(#)|(\/\/))
(?P<url>[\S]*?)(?=([\"\'])|(\s))([\s\S]*?\>)

Но это дает мне совпадение даже с тем, что с HTTP.

С этим регулярным выражением:(?<=href=[\"\'])(?!(http[s]?)|(ww[w]?))(?P<url>[\S]+)(?=[\"\']) Я могу получить только URL, не относящийся к http, но мне нужно, чтобы все содержимое тега <a> также соответствовало.

Любые предложения будут полезны.Рад, если это может быть улучшено.PS: не могу использовать Beautifulsoup.Поэтому, пожалуйста, предложите лучшее регулярное выражение для моей проблемы.

1 Ответ

0 голосов
/ 02 июня 2018

Это может работать:

(<a[^>]*href=[\"\'](?!http|ww)(?:\S+)[\"\'][^>]*>)

Это будет соответствовать <a href="example.com/index.html">, если вам нужно все до </a>, затем добавьте, например, .*?</\s*a> перед закрывающей скобкой.

Объяснение

  • (?!http|ww): отрицательный прогноз, на самом деле https? здесь не нужен, поскольку (?!http) уже будет соответствовать http и https (то же самое для ww и www)
  • (?:\S+): URL.Это можно улучшить, поскольку многие символы не разрешены в URL, но на данный момент этого достаточно.
  • [^>]* a потенциально может содержать другие элементы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...