python: регулярное выражение для выделения числа из строки

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

есть ссылка:

http://адрес/путь/путь/путь/страница.html

причем путь может содержать числа - например xxx-123-456-yyy

страница обязательно содержит числа в формате текст<число>текст<число>текст....<число>текст.html

необходимо выделить из полной ссылки число, которое первым находится на странице.html

т.е. если есть ссылка

http://link.ru/123-456/text789/1122-hi-90.html

то было бы выделено именно 1122

P.S.

я могу это сделать в лоб через split(), но это очень криво, поэтому хочется красивую регулярку


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

Автор решения: GrAnd
import re
link = "http://link.ru/123-456/text789/1122-hi-90.html"
print(re.search(r"\d+(?!.*/)", link)[0])

Ищет первое число после которого далее по строке точно нет слеша.

→ Ссылка
Автор решения: Wiktor Stribiżew

А ещё можно воспользоваться urllib.parse и парочкой split:

from urllib import parse
url = r'htt'+'p://link.ru/123-456/text789/1122-hi-90.html'
print(parse.urlsplit(url).path.rsplit('/')[-1].split('-')[0])
# => 1122

См. пример работы кода.

  • parse.urlsplit(url).path -> /123-456/text789/1122-hi-90.html
  • ....rsplit('/')[-1] -> 1122-hi-90.html
  • ....split('-')[0] -> 1122.
→ Ссылка
Автор решения: Namerek
import re
link = "http://link.ru/123-456/text789/1122-hi-90.html"
print(re.sub(r'^.+/(\d+).*$', r'\1', link))
#1122
→ Ссылка