Вы можете загрузить документ с помощью библиотеки синтаксического анализа DOM / HTML (см. Html5lib), захватить все текстовые узлы, сопоставить их с регулярным выражением и заменить текстовые узлы заменой URI регулярным выражением с помощью привязок вокруг него, используя PCRE, такие как:
/(https?:[;\/?\\@&=+$,\[\]A-Za-z0-9\-_\.\!\~\*\'\(\)%][\;\/\?\:\@\&\=\+\$\,\[\]A-Za-z0-9\-_\.\!\~\*\'\(\)%#]*|[KZ]:\\*.*\w+)/g
Я совершенно уверен, что вы можете прокрасться и найти какую-то утилиту, которая делает это, хотя я не могу думать ни о чем из головы.
Редактировать: Попробуйте использовать ответы здесь: Как получить python-markdown для дополнительного "ссылки" на ссылки при форматировании простого текста?
import re
urlfinder = re.compile("([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}|((news|telnet|nttp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+):[0-9]*)?/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*[^]'\\.}>\\),\\\"]")
def urlify2(value):
return urlfinder.sub(r'<a href="\1">\1</a>', value)
вызовите urlify2 для строки, и я думаю, что все, если вы не имеете дело с объектом DOM.