Оставьте подстроку при извлечении из совпадения регулярного выражения - PullRequest
2 голосов
/ 07 августа 2020

У меня есть следующее регулярное выражение:

^https?://www.example.com(:80)?/([^/]+)/$

Оно предназначено для сопоставления URL-адресов, например:

Что я хочу сделать при указании URL:

  1. Убедитесь, что URL соответствует регулярному выражению.
  2. Если URL соответствует регулярному выражению, извлеките весь URL без :80.

Я знаю, как сделать (1), но мне нужна помощь с (2). Например, для http://www.example.com:80/about-me/ я хочу сначала сопоставить его с регулярным выражением, а затем извлечь из него http://www.example.com/about-me/. Я хочу сбросить :80 при извлечении. Как я могу это сделать?

Я использую модуль re из стандартной библиотеки в Python 3.6.

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Вы можете использовать urlparse для замены порта с URL:

parsedUrl = urlparse('http://www.example.com:80/about-me/')
if parsedUrl.netloc == "www.example.com:80":
    stripped = parsedUrl._replace(netloc=parsedUrl.netloc.replace(":" + str(parsedUrl.port), ""))
    print(urlunparse(stripped))

Python demo

Output

http://www.example.com/about-me/

Или используйте шаблон с 2 группами захвата и используйте их для замены.

Если вы хотите сопоставить 1 или несколько цифр вместо 80, используйте \d+ и обратите внимание, чтобы избежать точки \.

^(https?://www\.example\.com)(?::80)?(/[^/]+/)$

Демонстрация Regex | Python демонстрация

import re
 
regex = r"^(https?://www\.example\.com)(?::80)?(/[^/]+/)$"
s = "http://w...content-available-to-author-only...e.com:80/about-me/"
result = re.sub(regex, r"\1\2", s, 1)
print(result)

Выход

http://www.example.com/about-me/
0 голосов
/ 07 августа 2020

Вы можете извлечь только соответствующие группы, как показано ниже:

s = "http://www.example.com:80/about-me/"

exp = r'^(https?://www\.example\.com)(:80)?(/[^/]+/)$'

m = re.match(exp, s)
groups = m.groups()
print(groups[0] + groups[2])

# ==> http://www.example.com/about-me/

Обратите внимание, что вы должны экранировать точки URL-адреса, используя \..

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