如何重写这种识别地址的新方法以在 Python 中工作?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
原始来源声明“这种模式应该适用于大多数现代正则表达式实现”,特别是 Perl。Python 的正则表达式实现是现代的,与 Perl 的类似,但缺少[: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()
对字符集中的某些字符进行转义。
编辑:使用 re.escape() 也可以,因为它只是在Everything前面加上一个反斜杠。起初我觉得这很粗糙,但在这种情况下肯定很好用。
>>> pat = pat % re.escape(string.punctuation)