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'
メタ文字やグルーピングについては適宜マニュアルを参照しましょう。