擅长:python、mysql、java
<p>你的模式看起来不错。问题在于内部的捕获组。用<code>?:</code>使它们都不被捕获,这样就只能同时捕获整个表达式。你知道吗</p>
<pre><code>p = re.compile('<a href="((?:http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)'\
'(?:youtu|www.youtube|youtube|vimeo|dailymotion|)'\
'\.(?:.+?))"',re.DOTALL)
match = p.findall(html)
for title in match:
print '<a href="' + title + '>' + title + '</a>'
</code></pre>
<hr/>
<p>要保留链接和域名,还需要另一个小小的更改—捕获整个表达式,并将网站名称作为两个单独的组(前者也捕获后者):</p>
<pre><code>p = re.compile('<a href="((?:http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)'\
'(youtu|www.youtube|youtube|vimeo|dailymotion|)'\
'\.(?:.+?))"',re.DOTALL)
match = p.findall(html)
for title in match:
print '<a href="' + title[0] + '>' + title[1] + '</a>'
</code></pre>
<p>通过<code>title[i]</code>访问组。你知道吗</p>