извлечь URL до .com, .org и т. д. - PullRequest
0 голосов
/ 13 апреля 2020

Ниже приведено мое регулярное выражение для извлечения URL

url_extractor  re.compile(r'((?:www\.|http:|https:)[^\s]+)', re.IGNORECASE)
mystring = """https://myname.abc.comsomename: """

Вышеуказанное регулярное выражение извлекает URL и любые символы, присутствующие после .com, в данном случае somename: https://myname.abc.comsomename.

Я хочу извлечь только до .com или .org (включительно), если присутствует. Если URL-адрес не заканчивается на .com или .org, я бы хотел извлечь его до пробела.

Так что в приведенном выше примере ожидаемый результат https://myname.abc.com.

, если URL-адрес https://myname.abc.xyz somename, ожидаемый результат - https://myname.abc.xyx.

Как мне изменить вышеприведенное регулярное выражение?

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете использовать

re.compile(r'(?:www\.|https?:)\S*?(?:\.(?:com|org)|(?=\s)|$)', re.IGNORECASE)

См. Демоверсию regex

Подробности

  • (?:www\.|https?:) - www. или http: или https:
  • \S*? - 0 или более непробельных символов, как можно меньше
  • (?:\.(?:com|org)|(?=\s)|$) - либо ., а затем либо com или org, либо местоположение, за которым сразу следует пробел, либо конец строки.

Python demo :

import re
text = r'somename https://myname.abc.comsomename: if the URL is https://myname.abc.xyz somename..'
rx = re.compile(r'(?:www\.|https?:)\S*?(?:\.(?:com|org)|(?=\s)|$)', re.IGNORECASE)
print ( rx.findall(text) )
# => ['https://myname.abc.com', 'https://myname.abc.xyz']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...