4.2.2 モジュールの内容

このモジュールは以下の関数と定数および例外を定義してtます。

compile (pattern[, flags])
正規表現パターンを正規表現オブジェクトにコンパイルします。正規表現オブジェクトは 以下に述べるmatch()search()メソッドを使ってマッチングに 利用することが出来ます。

正規表現の動作をflags値を指定することにより変更することが出来ます。 値は以下の値を指定でき、ビット単位のOR(|演算子)を使って 組み合わせて使うことも出来ます。

このシーケンスは

prog = re.compile(pat)
result = prog.match(str)

以下と同じです。

result = re.match(pat, str)

単一プログラムで何度も使われる正規表現の場合、compile()を使うバージョンの 方がより有効です。

I
IGNORECASE
大文字小文字を無視したマッチングを行います。つまり[A-Z]のような表現は 小文字にもマッチングします。これは現在のロケールには影響されません。

L
LOCALE
\w, \W, \b, \Bを現在のロケールに依存させます。

M
MULTILINE
これが指定されるとパターン文字"^"は文字列の先頭と各行の先頭(ニューライン の直後)にマッチします。またパターン文字"$"は文字列の最後と各行の最後 (ニューラインの直前)にマッチします。 デフォルトでは"^"は文字列の先頭のみにマッチし、"$"は文字列の 最後ともしあれば文字列の最後にあるニューラインの直前にのみマッチします。

S
DOTALL
"."特殊文字をニューラインを含むすべての文字にマッチさせるようにします。 このフラグがなければ"."はニューラインを除くすべての文字に マッチします。

X
VERBOSE
このフラグは正規表現を見易く書けるようにしてくれます。 文字クラス内またはエスケープされていないバックスラッシュが前にある場合を除いて、 パターン内のホワイトスペースは無視されます。 また、"#"を含む行で"#"が文字クラス内にないかエスケープ されていないバックスラッシュが前になければ、その"#"を左端とし行の 終端までが無視されます。

escape (string)
すべての非英数文字をバックスラッシュ化した文字列を返します。 これは正規表現のメタキャラクタを含むかもしれない任意のリテラル文字列をマッチング したい場合に役に立ちます。

match (pattern, string[, flags])
stringの先頭の0個以上の文字が正規表現patternにマッチするとき、 対応するマッチオブジェクトインスタンスを返します。 文字列がパターンにマッチしないときはNoneを返します。 これは長さ0のマッチとは異なることに注意して下さい。

search (pattern, string[, flags])
stringをスキャンして正規表現patternがマッチする場所を探し、 対応するマッチオブジェクトインスタンスを返します。 パターンにマッチする場所が文字列になければNoneを返します。 これは文字列内のどこかに長さ0のマッチを見つけたのではないことに注意して下さい。

split (pattern, string, [, maxsplit = 0])
stringpatternの出現回数で分割します。 パターン内で「部分文字列を取り込む括弧」が使われていれば、パターンまたはサブパターン の出現も返されます。maxsplitが0でなければ最大でもmaxsplit回の 分割が行われ、文字列の残りはそのリストの最後の要素として返されます。 (非互換に関する注:オリジナルのパイソン1.5リリースではmaxsplitは 無視されます。これは以降のリリースではフィックスされています。)
>>> re.split('[\W]+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('([\W]+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('[\W]+', 'Words, words, words.', 1)
['Words', 'words, words.']
この関数は古いregsub.split()regsub.splitx()の機能を 結合して拡張したものです。

sub (pattern, repl, string[, count = 0])
string内のpatternにマッチする重ならない最も左側のものを replで置き換えて得られる文字列を返します。 パターンが見つからない場合は、stringがそのまま返されます。 replには文字列または関数を指定できます。関数の場合は、patternの 重ならない出現箇所ごとにその関数が呼び出されます。関数は一つのマッチオブジェクト引き数 をとり、置き換えた文字列を返します。例えば、
>>> def dashrepl(matchobj):
....    if matchobj.group(0) == '-': return ' '
....    else: return '-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'
パターンは文字列か正規表現オブジェクトです。 正規表現フラグを指定する必要があれば、正規表現オブジェクトを使うかパターン内に 埋め込み修飾語を使わなければなりません。例えば、 "sub("(?i)b+", "x", "bbbb BBBB")"は'x x'を返します。

オプションの引き数countは置き換えられるパターンの最大出現回数です。 countは負でない整数でなければならず、デフォルト値0はすべての出現箇所を 置き換えることを意味しています。

パターンに対する空のマッチは以前のマッチに隣接しない場合のみ置き換えられます。 従って、"sub('x*', '-', 'abc')"は'-a-b-c-'を返します。

replが文字列の場合、その中のバックスラッシュエスケープはすべて処理されます。 "\n"は1個のニューライン文字に変換され、"\r"は 1個のラインフィードに変換される等です。 "\j"のような未知のエスケープはそのまま残されます。 "\6"のような後方参照はパターン内のグループ6でマッチした部分文字列で 置き換えられます。

前述の文字エスケープと後方参照に加えて、"\g<name>"は (?P<name>...)という構文で定義されている "name"という名前のグループにマッチした部分文字列を使います。 "\g<number>"は対応するグループ番号を使います。つまり、 "\g<2>"は"\2"と同じですが、 置き換えの中では"\g<2>0"のように不明瞭にはなりません。 "\20"はグループ20に対する参照と解釈され、リテラル文字"0" を伴ったグループ2への参照とは解釈されません。

subn (pattern, repl, string[, count = 0])
sub()と同じ操作を実行しますが、タプル (新しい文字列, 置換が行われた回数)を返します。

error
関数に渡された文字列が有効な正規表現ではなかった場合(例えば括弧の不一致) やコンパイル中またはマッチング中に他のエラーが発生した場合に例外を発生させます。 文字列がパターンに対しマッチする部分を含んでいないときには決してエラーを 発生させることはありません。

guido@python.org