擅长:python、mysql、java
<p>表达式使用了一些在Python中工作方式不同的特性。在</p>
<ul>
<li><p>Python没有<code>[[:punct:]]</code>字符组;我使用了一个<a href="http://www.regular-expressions.info/posixbrackets.html" rel="nofollow">POSIX regex reference</a>来扩展它。</p></li>
<li><p>表达式使用可选组;在开头匹配<code>http://</code><em>或</em><code>www.</code>,但随后在替换中同时使用<em>和</em>。在Python中这将失败。解决方案:使用替换函数。</p></li>
</ul>
<p>因此,要获得相同的功能,您可以使用:</p>
<pre><code>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)
</code></pre>
<p>演示:</p>
^{pr2}$