Pythonの正規表現の自分用まとめ

今気づいたのですが、Pythonについてこのブログで書くのは初めてなのですね*1

というわけで、タイトル通りのメモです。ターゲットはPython3.xですが、2.xとの違いはあまり無さそうです。

reモジュール

正規表現はreモジュールが担当します(import re)。
マニュアルはここです。日本語はここが参考になります。

>>> import re
>>> m = re.match(r"(\w+)", "hoge huga piyo")
>>> m
<_sre.SRE_Match object at 0x1006aecd8>
>>> m.groups()
('hoge',)
>>> m.group(0)
'hoge'
>>> m.group(1)
'hoge'
>>> m.string[m.start(0):m.end(0)] == m.group(0)
True

re.matchは、先頭からのマッチ部分を探します。第一引数がパターン、第二引数が対象の文字列で、戻り値は、Match Objectsです。第一引数についてはraw string(r"")を利用すると、バックスラッシュ地獄を避けられて便利です。

m.stringは対象の文字列がそのまま入ります。m.group(0)でマッチ部分全体を取得でき、m.group(n)でグループ化した部分*2を順に取得できます。

re.matchに似たものとしてre.searchがあります。re.searchは、先頭から見ていって最初に見つけたマッチを返します(参考「match() vs search()」)。また、何回も同じ正規表現を使うときは、re.compileするのが良さそうです。re.compileした場合は、第一引数のパターンの指定がなくなります。

>>> p = re.compile("huga (\w+)")
>>> p
<_sre.SRE_Pattern object at 0x1006eb538>
>>> m = p.match("hoge huga piyo")
>>> m == None
True
>>> m = p.search("hoge huga piyo")
>>> m.group(0)
'huga piyo'
>>> m.group(1)
'piyo'

メタ文字やグルーピングについては適宜マニュアルを参照しましょう。

*1:Pythonは使い捨てスクリプトを書くときによく使います

*2:括弧で囲った部分