Регулярное выражение Grubers URL в Python

Как мне переписать этот новый способ распознавания адресов для работы на Python?

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

Ответ 1

исходный источник, в котором говорится: "Этот шаблон должен работать в большинстве современных реализаций регулярных выражений" и, в частности, 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() работает так же хорошо, поскольку оно просто обращается к косой черте перед всем. Сначала это показалось мне грубым, но, безусловно, отлично подходит для этого случая.

>>> pat = pat % re.escape(string.punctuation)

Ответ 2

Я не думаю, что у python есть это выражение

[:punct:]

Wikipedia говорит, что [:punct:] совпадает с

[-!\"#$%&\'()*+,./:;<=>[email protected]\\[\\\\]^_`{|}~]