如何重写此new way to recognise地址以在Python中工作?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

最佳答案

original source声明“此模式应在大多数现代正则表达式实现中均有效”,特别是Perl。 Python的regex实现是现代的similar to Perl's,但缺少[:punct:]字符类。您可以使用以下命令轻松构建它:

>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
re.sub()调用转义字符集as required中的某些字符。

编辑:使用re.escape()同样有效,因为它只是在所有内容前面加上一个反斜杠。刚开始时,这对我来说很粗糙,但是对于这种情况当然可以用。
>>> pat = pat % re.escape(string.punctuation)

10-06 15:42