一般に、HTML の解析は、BeautifulSoup などのライブラリを使用して行うのが最適です。このライブラリは実質的にすべての面倒な作業を処理し、より直感的なコードを作成します。また、以下の@Tadeckのリンクを読んでください-回避できる場合は、正規表現とHTMLを混在させないでください(軽く言えば)。
あなたの質問に関しては、その行は「正規表現」と呼ばれるものを使用して、テキスト (この場合は HTML) 内の一致するパターンを見つけます。re.findall()
はリストを返すメソッドなので、それだけに注目すると:
re.findall(r'href="([^"]+).*class="vip" title=\'([^\']+)', lines):
r
これは、バックスラッシュなどの文字が文字どおりに解釈されることを意味します。
href="([^"]+)
括弧はグループ (一致で何を気にするか) を示し、[^"]+
「引用符以外のすべてに一致する」という意味です。ご想像のとおり、このグループはリンクの URL を返します。
.*class="vip"
は.*
、何にでも (ほとんど何にでも) 0 回以上一致します (ここには、他のタグ、リンクの終了引用符、空白などが含まれる可能性があります)。特別なclass="vip"
ことは何もありません - 表示する必要があるだけです。
title=\'([^\']+)', lines):
ここでは、エスケープされた引用符と、上で見た別のグループが表示されます。今回は、title
タグの後の 2 つのアポストロフィの間にあるものをキャプチャしています。
この最終結果は、すべての一致のリストを繰り返し処理していることです。これらの一致は のよう(my_matched_link, my_matched_title)
になり、 に渡されfor url, title
、その後さらに処理が行われます。