Вопрос

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

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

Это было полезно?

Решение

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

Редактировать:Использование re.escape() работает так же хорошо, поскольку оно просто вставляет обратную косую черту перед все.Сначала это показалось мне грубым, но, безусловно, отлично подходит для данного случая.

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

Другие советы

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

[:punct:]

Википедия говорит [:punct:] это то же самое, что и

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

Python не имеет Выражения в скобках POSIX.

В [:punct:] выражение в скобках эквивалентно в ASCII

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top