<p>不需要正则表达式。可以使用字符串方法<code>split</code>和<code>partition</code>执行此操作:</p>
<pre><code>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'
</code></pre>
<p>假设<code>,</code>不在url中。你知道吗</p>
<hr/>
<p>如果必须使用Regex,可以执行以下操作:</p>
<pre><code>https?://\S+(?=\s+1200w\b)
</code></pre>
<p>所以:</p>
<pre><code>In [184]: re.search(r'https?://\S+(?=\s+1200w\b)', srcset).group()
Out[184]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'
</code></pre>
<ul>
<li><code>https?://\S+</code>与URL匹配</li>
<li>零宽度的正向lookahead <code>(?=\s+1200w\b)</code>,确保URL后面有一个或多个空格(<code>\s+</code>),然后是<code>1200w</code></li>
</ul>
<p>OTOH,如果您对基于HTTP方案的匹配不满意,可以匹配start或<code>,</code>,并获取第一个捕获的组:</p>
<pre><code>In [185]: re.search(r'(?:^|,\s+)(\S+)\s+1200w\b', srcset).group(1)
Out[185]: 'https://cimg.co/w/articles/4/5ca/f022bb06dc.png'
</code></pre>