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