gpt4 book ai didi

Python 正则表达式用链接替换文本中的 URL(从 PHP 转换)

转载 作者:行者123 更新时间:2023-12-01 05:40:53 26 4
gpt4 key购买 nike

有人可以将此 PHP 正则表达式转换为 Python 吗?我试了好几次都没有成功:

function convertLinks($text) {
return preg_replace("/(?:(http:\/\/)|(www\.))(\S+\b\/?)([[:punct:]]*)(\s|$)/i",
"<a href=\"http://$2$3\" rel=\"nofollow\">$1$2$3</a>$4$5", $text);
}
<小时/>

编辑:我发现 [:punct:] 可以用 [!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~] 代替,所以我尝试了这个:

def convertLinks(text):
pat = re.compile(ur"""(?:(http://)|(www\.))(\S+\b\/?)([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]*)(\s|$)""", re.IGNORECASE)
return pat.sub(ur'<a href=\"http://\2\3" rel=\"nofollow\">\1\2\3</a>\4\5', text)

但是我收到了convertLinks(u"Test www.example.com test")的“不匹配的组”错误。

最佳答案

该表达式使用了一些在 Python 中工作方式不同的功能。

  • Python 没有 [[:punct:]] 字符组;我用了POSIX regex reference展开它。

  • 表达式使用可选组;在开头匹配 http:// www.,但随后在替换中使用两者。这在 Python 中会失败。解决办法:使用替换函数。

因此,要获得相同的功能,您可以使用:

import re

_link = re.compile(r'(?:(http://)|(www\.))(\S+\b/?)([!"#$%&\'()*+,\-./:;<=>?@[\\\]^_`{|}~]*)(\s|$)', re.I)

def convertLinks(text):
def replace(match):
groups = match.groups()
protocol = groups[0] or '' # may be None
www_lead = groups[1] or '' # may be None
return '<a href="http://{1}{2}" rel="nofollow">{0}{1}{2}</a>{3}{4}'.format(
protocol, www_lead, *groups[2:])
return _link.sub(replace, text)

演示:

>>> test = 'Some text with www.stackoverflow.com links in them like http://this.too/with/path?'
>>> convertLinks(test)
'Some text with <a href="http://www.stackoverflow.com" rel="nofollow">www.stackoverflow.com</a> links in them like <a href="http://this.too/with/path" rel="nofollow">http://this.too/with/path</a>?'

关于Python 正则表达式用链接替换文本中的 URL(从 PHP 转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17568168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com