Python – 正規表現を使う
2009年6月6日 5:51 PM by Abalone




文字列処理にはやはり正規表現が便利。
Pythonでももちろん正規表現は使える。Pythonで正規表現を使うためには、reモジュールを利用する。
なお、正規表現そのものについてはとりあえず説明しないので悪しからず。

  bash-3.2$ python
  Python 2.5.1 (r251:54863, Feb  6 2009, 19:02:12)
  [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
  Type "help", "copyright", "credits" or "license" for more information.
  >>> import re
  >>> re.match(r'^abc','abc')
  <_sre.SRE_Match object at 0x3ff70>

まず、’imort re’でreモジュールをインポートし、matchメソッドを使う。
matchメソッドは、引数を3つ取れる。最低2つの指定が必要で、最後の引数は動作を指定するフラグである。

    match(正規表現, 検査文字列, フラグ)

上の例では、正規表現として単に’abc’、検査文字列として’abc’を指定しているので、同じ文字列であるから、マッチしている。
正規表現と検査文字列が一致する場合には、MatchOjectが返却され、マッチしない場合はNoneが返却される。
フラグを指定することで、アルファベットの大文字小文字を無視したパターンマッチ等を指定できる。

  >>> re.match(r'abc','ABC',re.IGNORECASE)
  <_sre.SRE_Match object at 0x71640>

フラグは必要がない場合には指定しなくてよい。

何度も繰り返し同じ正規表現を使う場合には、compileメソッドを使って、正規表現オブジェクトを作るとよい。
以下の例では、正規表現’abc’をパターンマッチに使用する正規表現オブジェクトabcPatternを作成して、if文で使用している。

#!/usr/bin/env python

import re

abcPattern = re.compile(r'abc')

if abcPattern.match('abc'):
    print 'match abc'

if abcPattern.match('def'):
    print 'match def'

正規表現パターンを記述するときには、raw文字列を使用した方がよい。正規表現を使うときにはバックスラッシュを多用するため、エスケープシーケンスが無効になっていた方がやりやすいためだ。
以前raw文字列ではない通常の文字列を使って正規表現を書いていて、どうしても思った通りにマッチせず、気づくまでしばらく苦労したことがある。
raw文字列を使うには、通常の文字列の前に’r'を書いておくだけなので、正規表現を記述する場合にはこちらをお勧めする。

    r'raw文字列'

Pythonで正規表現を使うにはこんな感じでやればよい。個人的な意見ではあるが、compileメソッドで正規表現オブジェクトを作っておけるのが非常に助かる。複雑な正規表現になると、ちょっと見ただけではどういう文字列にマッチするように書かれた正規表現なのか理解するのに時間がかかることがあるが、正規表現オブジェクトを作成し、分かりやすい名前を付けた変数に入れておけば、後から見てもどういうパターンなのかが分かりやすいからだ。
テキストファイル処理等にはとても力を発揮してくれる。





トラックバックURL


この記事に対するコメント/トラックバックはまだありません


コメントをどうぞ

お名前(必須)
Eメールアドレス(公開されません)(必須)