Open lud4ik opened 5 years ago
URL_RE = re.compile(
r'(?:http|ftp)s?://' # http:// or https://
r'(?:\S+?@)?' # user and password
r'(?:(?:\w[\w-]{,62}\.)+(?:\w[\w-]{,62}\.?)|' # domain...
r'localhost|' # localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)'
r'(?=\s|$)',
re.IGNORECASE|re.UNICODE,
)
у меня получился такой вариант, домен может быть с юникодными символами и браузер правильно редиректит к примеру https://сота.укр -> https://xn--80a1aif.xn--j1amh/
конец строки больше для поиска ссылок в тексте
Не знаю что с этим делать. Насколько я вижу \w
это как-то чересчур круто. С таким же успехом можно просто типа http://.+
сделать и успокоиться :)
Может вот этот вмержить PR? https://github.com/Deepwalker/trafaret/pull/36
Если прям надо серьёзно проверять урлы, в рабочем коде я бы написал трафарет поверх YARN.
1) r'(?:\S+(?::\S)?@)?' # user and password (?::\S)? уже и так ловится \S+ Ещё здесь уместней нежадный квантификатор +?: \S+?@, потому что мы же не ожидаем ещё одного @ в этой подстроке? 2) r'(?:(?:A-Z0-9?.)+(?:[A-Z]{2,6}.?|[A-Z0-9-]{2,}.?)|' # domain... Эта сложность оправдана? По каким кейсам не подходит (?:\w[\w-]+.)+[\w-]+\w.? Минус должен быть в конце группы, я не знаю, что получится из [A-Z0-9-_]