多くの文字データの中から特定の情報を取り出したいときがあります。
Pythonの正規表現と文字列置換(replaceメソッド)を使ってHTML内の特定のタグを消去してみます。
ちなみに正規表現というのは、文字列を特定のパターンとして認識して処理するための機能です。
正規表現は、多くのプログラミング言語で使うことができます。(C++, C#, Java, PHP, JavaScript… Cでも使えると言えば使える。たいていのCコンパイラはC++と同じく提供されているので)
次のHTMLコードからaタグのデータだけを消去したいとします。
<p>プログラミング学習<a href="http://diannao.work/">こちら</a></p> <p>暇つぶし<a href="https://youtube.com/">こっち</a></p>
最終的にこんな感じで取り出したいとします。
<p>プログラミング学習</p> <p>暇つぶし</p>
まずは、aタグ部分のみを抽出します。
ここで正規表現を使います。
aタグは、
<a
ではじまり、
</a>
で終わります。
こういった決まりきった部分をパターンと呼びます。
Pythonで正規表現を使って定義するには、まず
import re
でパッケージreをインポートします。
次にパターンの定義です。
# aタグの正規表現(<a href="****">XXXX</a>) regexp = re.compile("<a.*/a>")
compileメソッドを使うとパターンを定義できます。”~”内の文字列には意味があります。
この場合、<aではじまり/a>で終わるまでを表していて、中にある.は任意の1文字を*はその繰り返しを表します。
<aから/a>まで何文字あるかは、HTMLによって違うので分かりませんよね。こうした場合に.や*の記号は威力を発揮します。
正規表現で1冊本が書けると言われるくらいなので、この記事では正規表現はこれくらいにしておきます。「覚えておけば色々と楽が出来るようになる!」と頭の片隅においといてください)
プログラムを学ぶ人の中で途中で挫折してしまう人がいます。項目ごとに全て理解してから進もうとする人はまず失敗します。正規表現などもその一つだと思います。次に進みましょう。
パターンを定義したら文字列からパターンを取り出す部分です。
とりあえずHTMLタグの文字列が入った変数としてhtmlを定義しておきます。
# HTMLタグイメージ html = """ <p>プログラミング学習<a href="http://diannao.work/">こちら</a></p> <p>暇つぶし<a href="https://youtube.com/">こっち</a></p> """
この変数html中からaタグのみを取り出します。
パターンを定義して見つかったaタグを全てリスト形式で抽出できる便利なfindallメソッドが用意されています。
# aタグの正規表現 regexp = re.compile("<a.*/a>") # htmlからaタグ部分のみを取り出す atags = regexp.findall(html)
変数atagsには、戻り値として見つかったaタグがリスト形式で格納されます。
イメージとしては、こんな感じで格納されています。
atags[0]の内容 <a href="http://diannao.work/">こちら</a> atags[1]の内容 <a href="https://youtube.com/">こっち</a>
全てのaタグがatagsに取り出されました。
文字列置換を使ってこのaタグ部分を「」(空文字列)に置き換えます。
# htmlからaタグ部分をreplaceにより消去 for atag in atags: html = html.replace(atag, "")
最後に画面に表示してみます。
print(html)
表示結果
<p>プログラミング学習</p> <p>暇つぶし</p>
以下に今回のプログラム全体を示します。
コメント