在Python中使用正则表达式替换URL为链接

4 投票
1 回答
8288 浏览
提问于 2025-04-15 12:49

我想知道怎么把一些文字变成链接。在我用PHP的时候,我有一段代码可以很好地完成这个任务:

            $text = preg_replace("#(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\3</a>", $text);
            $text = preg_replace("#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\3</a>", $text);

我在Python里试了试,但没能成功。如果有人能把这段代码翻译成Python就太好了 :)..

1 个回答

7

下面的代码是一个简单的Python翻译。你需要确认它确实能完成你想要的功能。想了解更多信息,可以查看这个链接:Python正则表达式使用指南

import re

pat1 = re.compile(r"(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)", re.IGNORECASE | re.DOTALL)

pat2 = re.compile(r"#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)", re.IGNORECASE | re.DOTALL)


urlstr = 'http://www.example.com/foo/bar.html'

urlstr = pat1.sub(r'\1<a href="\2" target="_blank">\3</a>', urlstr)
urlstr = pat2.sub(r'\1<a href="http:/\2" target="_blank">\3</a>', urlstr)

print urlstr

这是我这边输出的结果:

<a href="http://www.example.com/foo/bar.html" target="_blank">http://www.example.com</a>

撰写回答