Не брать значение после определённых символов

Нужно разделить строку https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483 так, чтобы получилось: cvM38hAo.jpg.

Метод split делит строку только одним символом, на выходе получается cvM38hAo.jpg?size=604x483.

Нужно также убрать всё, что идёт после ?.


Ответы (3 шт):

Автор решения: MaxU

Лучше всего воспользоваться соответствующими инструментами для парсинга URL и путей:

import os
from urllib.parse import urlparse

url = "https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483"

res = os.path.basename(urlparse(url).path)

результат:

In [309]: res
Out[309]: 'cvM38hAo.jpg'
→ Ссылка
Автор решения: strawdog

Вариант от MaxU предпочтительней, но для общего сведения вот еще решение через регулярки:

import re
a = "https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483"

res = re.match(r".+/(.+)\?", a).group(1)

res:

'cvM38hAo.jpg'
→ Ссылка
Автор решения: Shamus Rezol

Еще один способ для ознакомления, в котором не используются какие-либо модули.

def url2filename(url: str, extensions: tuple=(".jpg", ".png", ".gif")):
    """Ищет имя (единственного) файла в url по его расширению."""
    for ext in extensions:
        index = url.find(ext) # index - индекс первого символа ext в url
        if index == -1:
            continue
        result = url[:index + len(ext)]
        while index > -1:
            index -= 1
            if result[index] in "/\\?%*:|":
                result = result[index + 1:]
                break
        return result
print(url2filename("https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483"))
→ Ссылка