Pythonで使えるメタキャラクタの一覧

Python ライブラリリファレンスより

“.”
(ピリオド) デフォルトのモードでは改行以外の任意の文字にマッチします。 DOTALL フラグが指定されていれば改行も含むすべての文字にマッチします。

“^”
(キャレット) 文字列の先頭とマッチします。MULTILINE モードでは各改行の直 後にマッチします。

“$”
文字列の末尾、あるいは文字列の末尾の改行の直前にマッチします。例えば、 foo は ‘foo’ と ‘foobar’ の両方にマッチします。一方、正規表現 foo$は ‘foo’ だけとマッチします。興味深いことに、 ‘foo1nfoo2n’ を foo.$ で検索し た場合、通常のモードでは ‘foo2′ だけにマッチし、MULTILINE モードでは ‘foo1′ にもマッチします。

“*”
直前にある RE に作用して、 RE を 0 回以上できるだけ多く繰り返したもの にマッチさせるようにします。例えば ab* は ‘a’、’ab’、あるいは ‘a’ に任意個数の’b’ を続けたものにマッチします。

“+”
直前にある RE に作用して、 RE を、1 回以上繰り返したものにマッチさせる ようにします。例えば ab+ は ‘a’ に一つ以上の ‘b’ が続いたも のにマッチし、 ‘a’ 単体にはマッチしません。

“?”
直前にある RE に作用して、 RE を 0 回か 1 回繰り返したものにマッチさせ るようにします。例えば ab? は ‘a’ あるいは ‘ab’ にマッチします。

*?, +?, ??
“*”、”+”、 “?” といった修飾子は、すべて 貪欲 (greedy) マッチ、すなわちできるだけ多くのテキストにマッチす るようになっています。時にはこの動作が望ましくない場合もあります。例え ば正規表現 <.*> を ‘title‘ にマッチさせると、 ‘‘ だけにマッチするのではなく全文字列にマッチしてしまいます。 “?”を修飾子の後に追加すると、非貪欲 (non-greedy) ある いは 最小一致 (minimal) のマッチになり、できるだけ 少ない 文字数のマッチになります。例えば上の式で .*?を使うと ‘‘ だけにマッチします。

{m}
前にある RE の m 回の正確なコピーとマッチすべきであることを指定 します;マッチ回数が少なければ、RE 全体ではマッチしません。例えば、 a{6} は、正確に 6個の “a” 文字とマッチしますが、 5個ではマッチしません。

{m,n}
結果の RE は、前にある RE を、 m回からn 回まで繰り返したもので、 できるだけ多く繰り返したものとマッチするように、マッチします。 例えば、a{3,5}は、3個から 5個の “a” 文字とマッチします。 mを省略するとマッチ回数の下限として0を指定した事になり、 n を省略することは、上限が無限であることを指定します; a{4,}b は aaaabや、千個の “a” 文字に bが 続いたものとマッチしますが、aaabとはマッチしません。 コンマは省略できません、そうでないと修飾子が上で述べた形式と混同されてしまうからです。

{m,n}?
結果の RE は、前にある RE の m回からn 回まで繰り返したもので、できるだけ少なく 繰り返したものとマッチするように、マッチします。これは、前の修飾子の 控え目バージョンです。 例えば、 6文字 文字列 ‘aaaaaa’では、a{3,5} は、5個の “a” 文字とマッチしますが、a{3,5}? は3個の文字と マッチするだけです。

“”
特殊文字をエスケープする( “*”や “?”等のような文字との マッチをできるようにする)か、あるいは、特殊シーケンスの合図です; 特殊シーケンスは後で議論します。

もしパターンを表現するのに raw string を使用していないのであれば、 Python も、バックスラッシュを文字列リテラルでのエスケープシーケンスとして 使っていることを覚えていて下さい;もしエスケープシーケンスを Python の構文解析器が認識して処理しなければ、そのバックスラッシュと それに続く文字は、結果の文字列にそのまま含まれます。しかし、もし Python が 結果のシーケンスを認識するのであれば、バックスラッシュを 2回 繰り返さなければ いけません。このことは複雑で理解しにくいので、 最も簡単な表現以外は、 すべて raw string を使うことをぜひ勧めます。

[]
文字の集合を指定するのに使用します。文字は個々に リストするか、文字の範囲を、2つの文字と”-”でそれらを分離 して指定することができます。特殊文字は集合内では有効ではありません。 例えば、[akm$]は、文字 “a”、”k”、 “m”、あるいは “$”のどれかとマッチします; [a-z] は、任意の小文字と、[a-zA-Z0-9] は、 任意の文字や数字とマッチします。 (以下で定義する) w やSのような 文字クラスも、範囲に含めることができます。もし文字集合に “]” や “-” を含めたいのなら、その前にバックスラッシュを 付けるか、それを最初の文字として指定します。たとえば、パターン []] は ‘]’ とマッチします。

A
文字列の先頭だけにマッチします。

b
空文字列とマッチしますが、単語の先頭か末尾の時だけです。 単語は英数字あるいは下線文字の並んだものとして定義されていますので、単語の末尾は 空白あるいは非英数字、非下線文字によって表されます。 b は、w と Wの間の境界として定義されているので、 英数字であると見なされる文字の正確な集合は、UNICODEとLOCALEフラグの 値に依存することに注意して下さい。 文字の範囲の中では、b は、 Python の文字列リテラルと互換性を持たせるために、 後退(backspace)文字を表します。

B
空文字列とマッチしますが、それが単語の先頭あるいは末尾に ない時だけです。これは bのちょうど反対ですので、 LOCALE とUNICODEの設定にも影響されます。

d
UNICODE フラグが指定されていない場合、 任意の十進数とマッチします;これは集合 [0-9] と同じ意味です。 UNICODE がある場合、Unicode 文字特性データベースで 数字と分類されているものにマッチします。

D
UNICODE フラグが指定されていない場合、 任意の非数字文字とマッチします;これは集合 [^0-9] と 同じ意味です。UNICODE がある場合、これは Unicode 文字 特性データベースで数字とマーク付けされている文字以外にマッチします。

s
LOCALE と UNICODE フラグが 指定されていない場合、任意の空白文字とマッチします;これは 集合 [ tnrfv]と同じ意味です。

LOCALE がある場合、これはこの集合に加えて現在のロケールで 空白と定義されている全てにマッチします。UNICODE が設定されると、 これは [ tnrfv] と Unicode 文字特性データベースで 空白と分類されている全てにマッチします。

S
LOCALE と UNICDOE がフラグが 指定されていない場合、任意の非空白文字とマッチします;これは 集合 [^ tnrfv] と同じ意味です。 LOCALE がある場合、これはこの集合に無い文字と、現在の ロケールで空白と定義されていない文字にマッチします。UNICODE が 設定されていると、[ tnrfv] でない文字と、 Unicode 文字特性データベースで空白とマーク付けされていないものに マッチします。

w
LOCALE とUNICODE フラグが 指定されていない時は、任意の英数文字および下線とマッチします;これは、集合 [a-zA-Z0-9_]と同じ意味です。LOCALEが設定されていると、 集合 [0-9_] プラス 現在のロケール用に英数字として定義されている任意の 文字とマッチします。 もし UNICODE が設定されていれば、 文字 [0-9_] プラス Unicode 文字特性データベースで英数字として分類されて いるものとマッチします。

W
LOCALEと UNICODE フラグが 指定されていない時、任意の非英数文字とマッチします;これは 集合 [^a-zA-Z0-9_]と同じ意味です。 LOCALEが指定されていると、 集合 [0-9_]になく、 現在のロケールで英数字として定義されていない任意の文字とマッチします。 もし UNICODEがセットされていれば、これは [0-9_] および Unicode 文字特性データベースで 英数字として表されている文字以外のものとマッチします。

Z
文字列の末尾とのみマッチします。

範囲内にない文字とは、その集合の補集合をとることで マッチすることができます。これは、集合の最初の文字として “^” を含めることで表すことができます; 他の場所にある “^”は、単純に “^”文字とマッチするだけです。例えば、 [^5] は、 “5″以外の任意の文字とマッチし、 [^^] は、 “^” 以外の任意の文字とマッチします。

“|”
A|B は、ここで A と B は任意の RE ですが、 A か B のどちらかとマッチする正規表現を作成します。任意個数の RE を、 こういう風に “|” で分離することができます。これはグループ (以下参照) 内部でも同様に使えます。検査対象文字列をスキャンする中で、 “|” で分離された RE は左から右への順に検査されます。 一つでも完全にマッチしたパターンがあれば、そのパターン枝が受理されます。 このことは、もし A がマッチすれば、たとえB によるマッチが 全体としてより長いマッチになったとしても、B を決して検査しないことを 意味します。 言いかえると、”|” 演算子は決して貪欲 (greedy) ではありません。 文字通りの “|”とマッチするには、| を使うか、 あるいはそれを [|] のように文字クラス内に入れます。

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。