LoginSignup
4
4

More than 3 years have passed since last update.

(Python)HTMLの読み取りと正規表現でつかえたところメモ

Posted at

PythonにてHTMLファイルに正規表現を施す時、
エンコーディングやその他諸々の箇所でつかえてしまったので、メモとして残します。

I. HTMLファイルの読み取り

codecs ライブラリーを使いましょう。Pythonの標準ライブラリなので(Appx. 1)、インストールいらずにimportだけで使用できます。

import codecs
f = codecs.open("hoge.html","r", encoding="utf-8")

注意

  • codecs.open関数には必ずencoding引数を指定しよう
    • Windows環境下だと、Shift-JISと明示されたファイル以外はうまく読み取れないそうです。支(つか)えていたところ先人がいました(Appx. 2)。

II.正規表現を施す

re ライブラリを使いましょう。こちらも標準ライブラリ(Appx. 1)なのでimportのみで使えます。

# (前章のつづき)
import re
str = f.read()
regex = '[abc]'
sample = re.findall(regex, str)

注意

  • 前章で読み取ったhtmlファイルを reの各関数に渡す際には、事前に必ずcodecs.read()関数を用いましょう

代表的な正規表現

以下、Appx. 3よりreの関数として汎用性の高そうなものを列挙します。regexには正規表現が入るものとします。

  • 前方検索: re.search(regex, string)
    • regexパターンがstring内にあるか調べてきて、存在した場合はその文字列(=regex)を返す
    • サーチに失敗した場合Noneを返すので、例えばif not re.search(regex, string):などで簡単に条件分岐に用いることが出来る
  • 全検索: re.findall(regex, string)
    • regexパターンがstring内にあるか調べてきて、一致箇所すべてを含んだリストを返す
    • この関数から別のre処理を行いたい時は、(文字列にするために)str関数を用いて文字列化させましょう(Appx. 4)。
  • 置換: re.sub(regex, replace, string, count=0)
    • regexパターンがstring内にあるか調べて、replaceに置換する
    • countに1以上の自然数を入力すると、stringの前方からregex該当箇所を何回置換するか指定できる。デフォルト値の0だと全箇所置換する
      • 「JavaScript等で正規表現を記述する際のグローバルサーチ(/g)ってPythonでどうやって表現するのかな?」と思っていたのですが、どうやらこのcount=0の状態で表現されているようです(Appx. 5)

なお、正規表現そのものについてはAppx. 6に詳しいです。

(以上)

参考 (Appendix / Appx.)

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4