re -- 簡素な正規表現
このモジュールは、該当する CPython モジュールのサブセットを実装しています。
詳しくはオリジナルの CPython ドキュメンテーションを参照してください: re.
このモジュールは正規表現操作を実装します。サポートされている正規表現構文は CPython の re モジュールのサブセットです(実際には POSIX 拡張正規表現のサブセットです)。
サポートされている演算子と特殊シーケンスは次のものです:
.任意の文字にマッチします。
[...]文字セットにマッチします。文字の個別指定と範囲指定をサポートします。文字セットには、なしセット(
[^a-c]など)も含みます。^文字列の先頭にマッチします。
$文字列の最後にマッチします。
?直前のサブパターンの0回または1回の繰り返しにマッチします。
*直前のサブパターンの0回以上の繰り返しにマッチします。
+直前のサブパターンの1回以上の繰り返しにマッチします。
???の非貧欲版で、直前のサブパターンの0回または1回の繰り返しにマッチしますが、0回が優先されます。*?*の非貧欲版で、直前のサブパターンの0回以上の繰り返しにマッチしますが、最短の繰り替えしが優先されます。+?+の非貧欲版で、直前のサブパターンの1回以上の繰り返しにマッチしますが、最短の繰り替えしが優先されます。|この演算子の左辺または右辺のどちらかのサブパターンにマッチします。
(...)グループ化。各グループについてキャプチャします(キャプチャした部分文字列は
match.group()メソッドでアクセスできます)。(?:...)キャプチャしないグループ化。各グループは通常のグループ化と同じルールを使ってマッチングされますが、マッチングオブジェクトの一部にはなりません。
\d数字にマッチします。
[0-9]と同じです。\D数字以外とマッチします。
[^0-9]と同じです。\s空白にマッチします。
[ \t-\r]と同じです。\S空白以外にマッチします。
[^ \t-\r]と同じです。\w単語文字(ASCII のみ)にマッチします。
[A-Za-z0-9_]と同じです。\W単語文字(ASCII のみ)以外にマッチします。
[^A-Za-z0-9_]と同じです。\エスケープ文字です。上にあげたもの以外、バックスラッシュの後に続く文字はすべて文字通りに解釈されます。たとえば
\*はリテラル*と同等です(*演算子として扱われません)。なお\r,\nなどは特別に処理されず、リテラル文字r,nなどと等価になります。このため、正規表現に Python のraw文字列(r"")を使うことはお勧めしません。たとえば r"rn" を正規表現として使った場合は"rn"と同じになります。CR LF にマッチさせるには"\r\n"を使ってください。
未サポート:
反復回数 (
{m,n})名前付きグループ (
(?P<name>...))より高度なアサーション (
\b,\B)\r,\nなどの特殊文字エスケープ - 代わりに Python 自体のエスケープを使ってください。などなど
サンプルコード:
import re
# re はエスケープ自体をサポートしていないので、r"" 文字列の利用は
# お勧めしません。
regex = re.compile("[\r\n]")
regex.split("line1\rline2\nline3\r\n")
# Result:
# ['line1', 'line2', 'line3', '', '']
関数
- re.match(regex_str, string)
regex_str をコンパイルし、文字列 string とマッチするか照合します。マッチは常に文字列の先頭位置から行います。
- re.search(regex_str, string)
regex_str をコンパイルして文字列 string を検索します。
matchとは異なり、正規表現にマッチする最初の位置の文字列を検索します(正規表現がマッチすれば位置 0 の文字列になることもあります)。
- re.sub(regex_str, replace, string, count=0, flags=0, /)
regex_str をコンパイルして文字列 string を検索し、マッチしたものすべてを replace で置換した新しい文字列を返します。
replace には文字列または関数を指定できます。文字列である場合、エスケープシーケンス
\<number>と\g<number>が対応するグループに展開するために使われます(マッチしなかったグループについては空文字列)。 replace が関数であれば、その関数は単一の引数(match オブジェクト)をとらなければならず、置換した文字列を返す必要があります。count に 0 で無い値が指定された場合、置換はこの指定の数に達したところで終わります。 flags 引数は無視されます。
注記: この関数の可用性は MicroPython ポート に依存します。
- re.DEBUG
コンパイルされた正規表現についてのデバッグ情報を表示するフラグ値。(可用性は MicroPython ポート に依存します。)
regex オブジェクト
コンパイルされた正規表現です。このクラスのインスタンスは re.compile() を使っって作成されます。
- regex.match(string[, pos[, endpos]])
- regex.search(string[, pos[, endpos]])
- regex.sub(replace, string, count=0, flags=0, /)
モジュールレベルの関数
match(),search(),sub()と同様です。同じ regex が複数の文字列に適用されている場合、このメソッドを使ったほうが(ずっと)より効率的です。オプションの第2引数 pos は、検索を開始する位置を文字列中のインデックスで指定します。デフォルトは
0です。ただし、これは文字列をスライスするのと完全に同じではありません。正規表現パターン文字'^'は、文字列の本当の先頭や改行直後の位置にはマッチしますが、検索を開始するインデックス位置には必ずしもマッチするわけではありません。オプションの引数 endpos は、文字列をどこまで検索するかを制限します。文字列が endpos 文字の長さであるかのように扱われるため、実際には pos から
endpos - 1までの文字だけが検索対象になります。
- regex.split(string, max_split=-1, /)
regex を使って string を分割します。 max_split を与えた場合、それは実行する分割の最大数を指定します。文字列のリストを返します(max_split を指定した場合は最大 max_split+1 の数の文字列を返します)。
match オブジェクト
match オブジェクトは match() と search() メソッドが返し、 sub() の置換関数に渡すものです。
- match.group(index)
マッチした(部分)文字列を返します。 index が 0 であればマッチした文字列全体を返し、1 以上であれば指定のグループにマッチした文字列です。数字によるグループ指定だけがサポートされます。
- match.groups()
マッチしたグループの部分文字列すべてのタプルを返します。
注記: この関数の可用性は MicroPython ポート に依存します。
- match.start([index])
- match.end([index])
マッチした部分文字列グループの先頭または最後の元文字列中のインデックスを返します。index を指定しなければデフォルトでグループ全体になります。それ以外の場合は指定したグループになります。
注記: この関数の可用性は MicroPython ポート に依存します。
- match.span([index])
2項目のタプル
(match.start(index), match.end(index))を返します。注記: この関数の可用性は MicroPython ポート に依存します。