Gruber的Python中的URL正则表达式

Tob*_*ias 5 python regex gruber

如何重写这种新方法来识别在Python中工作的地址?

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

Pet*_*sen 12

原始来源的,指出"这种模式应该工作在最现代化的regex实现",明确的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)
Run Code Online (Sandbox Code Playgroud)

re.sub()呼叫转义字符集内的特定字符的要求.

编辑:使用re.escape()也可以,因为它只是在所有内容前面加上反斜杠.起初这对我来说很粗糙,但对于这种情况肯定会很好.

>>> pat = pat % re.escape(string.punctuation)
Run Code Online (Sandbox Code Playgroud)


YOU*_*YOU 5

我不认为python有这个表达式

[:punct:]
Run Code Online (Sandbox Code Playgroud)

维基百科说的[:punct:]是相同的

[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
Run Code Online (Sandbox Code Playgroud)