Нет необходимости в регулярных выражениях. Вы можете сделать это с помощью строковых методов split
и partition
:
In [181]: srcset = "https://cimg.co/w/articles/1/5ca/f022bb06dc.png 150w, https://cimg.co/w/articles/2/5ca/f022bb06dc.png 300w, https://cimg.co/w/articles/3/5ca/f022bb06dc.png 600w, https://cimg.co/w/arti
...: cles/4/5ca/f022bb06dc.png 1200w"
In [182]: def get_url(srcset):
...: for str_ in srcset.split(','):
...: url, _, ext = str_.strip().partition(' ')
...: if ext == '1200w':
...: return url
...:
In [183]: get_url(srcset)
Out[183]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'
Предполагается, что ,
не входит в URL.
Если вы должны использовать Regex, вы можете сделать:
https?://\S+(?=\s+1200w\b)
Итак:
In [184]: re.search(r'https?://\S+(?=\s+1200w\b)', srcset).group()
Out[184]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'
https?://\S+
соответствует URL
- Позитивный просмотр нулевой ширины,
(?=\s+1200w\b)
, гарантирует, что за URL следует один или несколько пробелов (\s+
), затем 1200w
OTOH, если вас не устраивает сопоставление на основе схемы HTTP, вы можете сопоставить начало или ,
и захватить первую захваченную группу:
In [185]: re.search(r'(?:^|,\s+)(\S+)\s+1200w\b', srcset).group(1)
Out[185]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'