Python Regular Expression添加指向url的链接

时间:2009-01-24 18:48:34

标签: python regex url

我正在尝试创建一个能够正确捕获网址的正则表达式,包括用http://example.com中的括号括起来的网址,以及https://blog.codinghorror.com/the-problem-with-urls/

中有关编码恐怖的说法

我目前正在使用以下内容在python中为以http和www开头的链接创建HTML A标记。<​​/ p>

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))

这种情况很有效,除非有人将网址包裹在parens中。有没有人有更好的方法?

1 个答案:

答案 0 :(得分:4)

问题是,URL可以将括号作为其中的一部分......(http://en.wikipedia.org/wiki/Tropical_Storm_Alberto_(2006))。你不能单独使用regexp来处理它,因为它没有状态。你需要一个解析器。因此,您最好的机会是使用解析器,并尝试猜测正确的近括号。这很容易出错(网址可以打开括号而不会关闭它)所以我猜你还是运气不好。

另请参阅http://en.wikipedia.org/wiki/,或(http://en.wikipedia.org/wiki/))和其他类似的有效网址。