Symfoware

Symfowareについての考察blog

Python 正規表現でマッチした部分の文字列を取得する(finditer)

例えば、htmlの中で


  1. <h3>ここが欲しい</h3>



こんな感じでh3タグでくくられている文字列が取得したい。
こんな時は、re.finditerを使うと簡単に取得できます。



サンプル



ポイントは取得したい箇所の正規表現を()でくくること。
サンプルはこんな感じになりました。


  1. # -*- coding:utf-8 -*-
  2. import re
  3. html = u"""
  4. <h3>ここが欲しい</h3>
  5. HTMLの内容。
  6. <h3>ここも欲しい</h3>
  7. 別の内容
  8. """
  9. pattern = r'<h3>(.*)</h3>'
  10. matchs = re.finditer(pattern, html)
  11. for match in matchs:
  12.     print match.groups()[0]




実行結果


$ python sample.py
ここが欲しい
ここも欲しい







複数のマッチ結果



もう1歩進んで、例えばリンク先のURLと文字列が欲しい。


  1. <a href="http://www.google.com">リンクの文字列</a>




()の箇所を増やせば対応できます。


  1. # -*- coding:utf-8 -*-
  2. import re
  3. html = u"""
  4. <a href="http://www.google.com">Google</a>
  5. HTMLの内容。
  6. <a href="http://symfoware.blog68.fc2.com/">Symfoware Blog</a>
  7. 別の内容
  8. """
  9. pattern = r'<a href="(.*)">(.*)</a>'
  10. matchs = re.finditer(pattern, html)
  11. for match in matchs:
  12.     groups = match.groups()
  13.     print u'url', groups[0]
  14.     print u'title', groups[1]
  15.     print u'-' * 10




実行結果


$ python sample.py
url http://www.google.com
title Google
----------
url http://symfoware.blog68.fc2.com/
title Symfoware Blog
----------


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/10/15(木) 21:29:25|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python サイトのSSL証明書の有効期限を取得する | ホーム | PostgreSQL + mysql_fdwでMySQLに仮想的なxml列を実現する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1800-77ab536e
この記事にトラックバックする(FC2ブログユーザー)