Регулярное выражение Python для добавления ссылок на URL - PullRequest
4 голосов
/ 24 января 2009

Я пытаюсь создать регулярное выражение, которое будет правильно захватывать URL-адреса, в том числе те, которые заключены в круглые скобки, как в (http://example.com) и о которых говорится об ужасе кодирования в https://blog.codinghorror.com/the-problem-with-urls/

В настоящее время я использую следующее для создания тегов HTML A в python для ссылок, начинающихся с http и www.

r1 = r"(\b(http|https)://([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))"
r2 = r"((^|\b)www\.([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))"
return re.sub(r2,r'<a rel="nofollow" target="_blank" href="http://\1">\1</a>',re.sub(r1,r'<a rel="nofollow" target="_blank" href="\1">\1</a>',text))

это работает хорошо, за исключением случая, когда кто-то оборачивает URL в паренсе. У кого-нибудь есть способ получше?

1 Ответ

4 голосов
/ 24 января 2009

Проблема в том, что URL-адреса могут иметь круглые скобки как часть их ... (http://en.wikipedia.org/wiki/Tropical_Storm_Alberto_(2006)). Вы не можете обработать это с помощью одного регулярного выражения, так как у него нет состояния. Вам нужен парсер. Наилучшим шансом было бы использовать синтаксический анализатор и попытаться угадать правильные закрывающие скобки, которые подвержены ошибкам (URL может открывать круглые скобки и никогда не закрывать их), так что я думаю, вам все равно не повезло.

См. Также http://en.wikipedia.org/wiki/, или (http://en.wikipedia.org/wiki/)) и другие аналогичные действительные URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...