Обрезка ссылки python

У меня есть ссылка по типу: https://example.com/example/example/2041674-Craps/313553930-Player-1-Player-2/

Мне нужно обрезать эту ссылку чтобы остались вот эти цифры -> 313553930

Обратить это всё в список и получать всё по индексу не выйдет потому, что ссылка меняется ежедневно и вместо https://example.com/ может быть https://example-123.com/ поэтому получится смещение и это не подходит.


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

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

Можно регуляркой вытаскивать, например:

import re

urls = [
    'https://example.com/example/example/2041674-Craps/313553930-Player-1-Player-2/',
    'https://example-123.com/example/2041674-Craps/313553930-Player-1-Player-2/',
]

for url in urls:
    items = re.findall(r'/(\d+)-Player', url)
    print(items[-1])
→ Ссылка
Автор решения: CrazyElf

Ну такой ещё вариант для разнообразия. Хотя из-за того, что в конце ссылки может быть или не быть / пришлось лишний filter писать на всякий случай:

url = "https://example.com/example/example/2041674-Craps/313553930-Player-1-Player-2/"
print(list(filter(len, url.split('/')))[-1].split('-')[0])
# 313553930

Если / в конце точно всегда есть, то гораздо короче можно написать:

print(url.split('/')[-2].split('-')[0])

Ну или так ещё с убиранием / если он есть, по совету insolor:

print(url.rstrip('/').split('/')[-1].split('-')[0])
→ Ссылка
Автор решения: Andy Pavlov

Через регулярки можно еще через re.search() вытащить, хотя re.findall будет удобнее, не выдавая ошибку при пустом поиске.

import re

urls = [
    'https://example.com/example/example/2041674-Craps/313553930-Player-1-Player-2/',
    'https://example-123.com/example/2041674-Craps/313553930-Player-1-Player-2/',
]

for url in urls:
    items = re.search('/(\d+)-Player', url).group(1)
    print(items)

Можно еще через split() строки с поиском вхождения Player

for url in urls:
    for url in urls:
print(next((v.split('-')[0] for v in url.split('/') if 'player' in v.lower()), None))

Во всех случаях имеем вывод:

313553930
313553930
→ Ссылка