Python3 – 正規表現 – シンタックス

文字にマッチするもの

一覧

文字 それぞれの文字にマッチする。Python3ではUnicode文字も対象。
. '\n'以外の任意の一文字にマッチする。re.S/re.DOTALLフラグが設定されると’\n’にもマッチする。
[...] 文字クラス。[]内に含まれる文字のいずれか一文字マッチする。'-'で範囲指定も可能。たとえば[abc]abcにマッチ。[a-z]は全ての小文字のアルファベット文字にマッチ。[abcx-z]abcxyzにマッチ。Unicode文字にも対応していて[0-9]は全角の数字にマッチ。先頭に'^'記号があると、その文字クラス以外の文字列がマッチする。たとえば[^abc]abc以外にマッチする。
\d 数字[0-9]にマッチ。Unicode文字の数字も対象となり、全角の数字[0-9]なども対象となる。re.A/re.ASCIIフラグが設定されると[0-9]にのみマッチする。バイト列に対しては[0-9]と等価。
\D 数字以外の文字にマッチ。Unicode文字の数字も除外対象となる。
\w 任意のUnicode単語文字にマッチ。あらゆる単語の一部になりうる文字で、文字・数字・アンダースコアが含まれる。re.ASCIIフラグが設定された場合[a-zA-Z0-9_]にマッチ。バイト列に対しては[a-zA-Z0-9_]と等価。
\W Unicode単語文字以外の文字にマッチ。
\s 任意の空白文字とマッチ。[ \t\n\r\f\v]など。
\S 空白以外の文字にマッチ。

Pythonの標準エスケープも正規表現で認識される。

\a\b\f\n\r\t\u\U\v、\x\\

ただし\bは単語境界を表し、文字クラス内でのみバックスペース文字を表す。

文字クラス

文字クラスはUnicode文字にも対応。

文字クラス内では特殊文字は意味を失い、1つの文字として扱われる。たとえば[(*+)]'(''*''+'')'のいずれかとマッチする。

'^'と、']'は例外で、'^'は先頭の場合のみ否定の意味でそれ以外の位置では文字'^'を表し、']'は末尾では無視されそれ以外の位置では文字']'を表す。

位置にマッチするもの

一覧

^ 文字列の先頭にマッチする。たとえば'^A'は先頭の文字が'A'であることを示す。デフォルトでは文字列全体の先頭だけにマッチするが、re.MULTILINEが指定されていれば、各改行の前にもマッチする。
$ 文字列の末尾にマッチする。たとえば’Z$'は末尾の文字が'Z'であることを示す。デフォルトでは文字列全体の末尾だけにマッチするが、re.MULTILINEが指定されていれば、各改行の後にもマッチする。
\b 単語境界にマッチする。単語境界は[^a-zA-Z0-9]

MULTILINE

re.MULTILINEフラグ指定の有無による動作の違いを確認する。

\b – 文字列境界

文字列境界が[^a-zA-Z0-9]であることが、以下の例で分かる。

繰り返し

 *  直前の文字の0回以上でできるだけ多くの繰り返し。'ab*'abbcに対してaabではなくabbとしてマッチする。
 +  直前の文字の1回以上でできるだけ多くの繰り返し。'ab+'abbbcに対してababbではなくabbbとしてマッチする。'ab?'abb...に対してabとしてマッチする。
 ?  直前の文字が0個か1個でできるだけ多くの場合にマッチ。
{m} 直前の文字のm回の繰り返し。
{m,n} 直前の文字のm回以上n回以下でできるだけ多くの繰り返し。
 {m,}  直前の文字のm回以上でできるだけ多くの繰り返し。
 {,n}  直前の文字のn回以下でできるだけ多くの繰り返し。

実行例

'a*'は長さ0の文字列にもマッチする。マッチした文字列の直後の空文字列にマッチすることが、以下の例でもわかる。

'aa?'aaaにマッチするが、最後のaaaに対しては、先頭のaaにマッチした後、残ったaにマッチしている。

'a{2}'は先頭からaaにマッチしていき、最後のaaaaには2回マッチしている。

'a{,3}'は各マッチの後の長さ0の文字列にもマッチしていて、最後のaaaaに対しては先頭のaaaにマッチした後、残ったaにマッチしている。

選択演算子(|)

'|'で区切られた要素のどれかとマッチすればよいことを表す。

注意点としては、'|'で区切られた要素の左から右へマッチング評価され、ある要素がマッチしたと評価されると、その部分列に対してそれ以降の要素の評価は行われない。

グループ(…)

()で囲んだ要素はグループ化されて、1つの文字と同じ様に扱われる。たとえば次の例では、'Aa'というパターンを1つのグループとして、それが繰り返される回数でマッチングさせている。

後方参照

()囲った部分には、先頭から順番に番号nがふられて、そのあとで'\n'のようにマッチした内容を再利用できる。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です