Поиск всех URL в строке, включая дефисы - PullRequest
0 голосов
/ 01 февраля 2019

Я ищу регулярное выражение, которое найдет все следующие URL:

hello.com hello1.com 1hello.com hello-1.com hello-hi1.com 1hello-hi.com h3ll0.com

Я пробовал несколько разных регулярных выражений, но, похоже, ничего не совсем правильно.

regex = re.compile('\w+\.(com|org|net)')
data = regex.search(string)
url = data.group(0)

Я хочу, чтобы он возвратил все вышеупомянутые URL

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Можно попробовать разбить строку на '.'разделитель, а затем проверка, находится ли значение в белом списке, например, ['com', 'org', 'net', 'io' ....]

Например,

whitelist = {'com', 'org', 'net', 'io'}
possible_url = 'hello.com'
if possible_url.split('.')[-1] in whitelist:
    return True
0 голосов
/ 01 февраля 2019

с помощью простого регулярного выражения может привести к случайному совпадению слов.например, простое использование [\w-]+\.(com|org|net) demo # 1 будет соответствовать вашим требованиям, но будет пропускать все другие домены, пропускать субдомены и сопоставлять обычные слова.

Это регулярное выражение может быть лучше подойдет \b\w[-.\w]+\.(com|org|net)\b демо # 2

0 голосов
/ 01 февраля 2019

Вы можете добавить эту часть (-\w+)* в свое регулярное выражение, что позволит ему иметь дополнительный дефис в части имени домена вашего URL.Вы можете использовать этот URL,

\w+(?:-\w+)*\.(?:com|org|net)
   ^^^^^^^^^ this allows the URL to have optional hyphen

Демо

Вы должны сделать группу без захвата, если она вам действительно не нужна, поскольку она улучшаетсяего производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...