Как я переписываю этот новый способ распознать, что адреса работают в Python?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
A ] Оригинальный источник Для этого состояния «Этот паттерн должен работать в большинстве современных реализаций Regex» и конкретно Perl. Реализация Regex 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)
Call ()
Call () вызов ускользает от определенных символов внутри набора символов по мере необходимости .
Редактировать : Использование RE.ESCAPE () работает так же, поскольку он просто прилипает к обратной косою, перед все . Что поначалу почувствовало себя грубому мне, но, безусловно, работает нормально для этого случая.
>>> pat = pat % re.escape(string.punctuation)
Не думаю, что у питона есть такое выражение
[:punct:]
Википедия говорит, что [:punct:]
равно
[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
Python не имеет POSIX-выражения в кронштейнах .
Скобкобковое выражение [:punct:]
в ASCII эквивалентно
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]