2014/10/07

ライブラリ:re

Pythonの「 re 」というライブラリをご紹介します。

import re

re は正規表現を扱うためのライブラリです。 re = Regular Expression の略ですね。

re の基本的な使い方を以下、見ていきます。


re.search

re.search は探索のための関数です。与えられたテキストの中の正規表現パターンを探索します。

例えばこんな感じ。
# ライブラリ読み込み
import re

# 対象テキスト
text = """
When you were born,
you cried and the world rejoiced.
Live your life so that when you die,
the world cries and you rejoice.
"""

# 一致するパターンを検索
# 「d」で終わる単語を探す
result = re.search(r"\w+d", text)

# 見つかれば結果を表示
# 見つからなければ no match とだけ表示
if result:
    print result.group()  # => 最初に一致したパターン
    print result.start(), result.end()  # => 一致した箇所のインデックス
    print result.span()  # => 上の start と end のタプル
else:
    print "no match"

re.search が返す値は、一致するパターンが
見つかった場合 マッチオブジェクト
見つからなかった場合 None
となりますので、上の例のように search の戻り値を if で判定することによって見つかった場合と見つからなかった場合の処理を分けることができます。


re.findall

re.findall も探索のための関数です。
re.search が一致したパターンをひとつだけ返すのに対し、 re.findall はすべての一致パターンを返します。

こちらも例を。
results = re.findall(r"\w+d", text)

# 見つかれば結果を表示
# 見つからなければ no match とだけ表示
if results:
    # 一致したパターンを空白区切りですべて表示
    for r in results:
        print r,
        print ""
    else:
        print "no match"

findall は結果をすぐさまリストにしますが、同様の処理をして結果をイテレータとして返すものとして finditer という関数もあります。


re.split

re.split は分割のための関数です。指定した正規表現パターンを区切り文字にしてテキストを分割します。結果はリストで返ってきます。

こんな感じです。
sentences = re.split(r"\W", text)

print sentences
# => text をアルファベットと数字以外のすべての文字を区切り文字にして分割したリスト


re.sub

re.sub は置換のための関数です。正規表現パターンと一致する部分を別の文字列に置換した文字列を返します。

こんな感じです。
text_replaced = re.sub(r"\w+d", "***", text)

print text_replaced  # => d で終わる単語がすべて *** に置換された文字列

デフォルトでは、一致したパターンがすべて置換されて返ってきます。

置換する最大数を指定したい場合はキーワード引数 count を使います。
text_replaced = re.sub(r"\w+d", "***", text, count=3)

こうすると、 count に指定した数値を上限回数として置換してくれます。


以上です。

今回はこの4つの関数を見てみました。
  • re.search 検索 1つだけ
  • re.findall 検索 複数個 ジェネレータの re.finditer も存在する
  • re.split 分割
  • re.sub 置換

これらの他にも、関数 re.compile (正規表現パターンオブジェクトを生成できる関数)や正規表現オプションなど、正規表現がらみの便利な機能が豊富に用意されています。

詳しく知りたい場合は、参考ページを参照してみてください。


参考
Python Regular Expressions - Educational Materials — Google Developers
Regular Expressions in Python. Python Tutorials.
Regular Expression HOWTO — Python公式ドキュメント

Pythonでの正規表現の簡単なまとめ - minus9dの日記
正規表現 (Regular Expression) - Python 入門

追記20141009
参考リンクの Google Developers のページを日本語訳されている方がいるということでコメントをいただきました。こちらもよろしければ。
Python の正規表現 - 手習い録

2 件のコメント:

M Endo さんのコメント...

いつもBlog見てます。
Google Developersの参考リンクについてなんですが、日本語訳をされてる方のページを見つけましたのでよかったらご参考までに
s5.cocolog-nifty.com/blog/gpc-index-j.html

ゴトウハヤト さんのコメント...

ページご紹介いただきありがとうございます!