Screaming Loud

日々是精進

HTMLタグを正規表現で取り除く

HTMLのタグはParserで取り除けるが,うまくいかない時がある.
そんな時に正規表現で取ってるようになっておけば楽.
コードは以下の感じ.

import re

url = <a id="logo" title="Google ホームへ" href="http://www.google.co.jp/webhp?hl=ja">Google<img height="288" width="167" alt="" src="/images/srpr/nav_logo73.png"></a>

print re.sub("<.*?>","",url)
#Google

正規表現のキモは以下.

  • "?"

直前にある RE に作用して、 RE を 0 回か 1 回繰り返したものにマッチさせるようにします。例えば ab? は 'a' あるいは 'ab' にマッチします。

  • *?, +?, ??

"*"、"+"、 "?" といった修飾子は、すべて 貪欲 (greedy) マッチ、すなわちできるだけ多くのテキストにマッチするようになっています。時にはこの動作が望ましくない場合もあります。例えば正規表現 <.*> を 'title' にマッチさせると、 '' だけにマッチするのではなく全文字列にマッチしてしまいます。 "?"を修飾子の後に追加すると、非貪欲 (non-greedy) あるいは 最小一致 (minimal) のマッチになり、できるだけ 少ない 文字数のマッチになります。例えば上の式で .*?を使うと '' だけにマッチします。

?の使い方が変わるところに注意が必要.