re --- 簡易な正規表現¶
このモジュールは正規表現操作を実装します。サポートされる正規表現の構文は CPython の re モジュールのサブセット(実際には POSIX 拡張正規表現のサブセット)です。
サポートされる演算子と特殊シーケンスは次のとおりです:
.任意の1文字にマッチします。
[...]文字の集合にマッチします。個々の文字と範囲がサポートされ、否定集合(例:
[^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"\r\n"を正規表現として使うと"rn"と等価になります。CR 文字に続く LF にマッチさせるには"\r\n"を使用してください。
サポートされていないもの:
回数指定の繰り返し(
{m,n})名前付きグループ(
(?P<name>...))より高度なアサーション(
\b、\B)\r、\nのような特殊文字エスケープ - 代わりに Python 自身のエスケープを使用してくださいなど。
例:
import re
# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")
regex.split("line1\rline2\nline3\r\n")
# Result:
# ['line1', 'line2', 'line3', '', '']
関数¶
- re.search(regex_str: str, string: str) 'match | None'¶
regex_str をコンパイルし、それを string 内で検索します。
matchとは異なり、正規表現にマッチする最初の位置を文字列内で探します(正規表現がアンカーされている場合は依然として0になることもあります)。
- re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
regex_str をコンパイルし、それを string 内で検索して、すべてのマッチを replace で置換し、新しい文字列を返します。
replace は文字列または関数を指定できます。文字列の場合は
\<number>および\g<number>の形式のエスケープシーケンスを使用して、対応するグループに展開できます(マッチしないグループの場合は空文字列になります)。replace が関数の場合は、単一の引数(マッチ)を取り、置換文字列を返す必要があります。count が指定され、かつ0でない場合は、その回数だけ置換を行った後に置換を停止します。flags 引数は無視されます。
Regex オブジェクト¶
コンパイル済みの正規表現です。このクラスのインスタンスは re.compile() を使用して作成されます。
- class re.regex
re.compile()によって返されるコンパイル済みの正規表現オブジェクトです。- match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
このコンパイル済み正規表現を string に対して、検索領域の先頭にアンカーして適用し、
matchオブジェクトを返します。正規表現がマッチしない場合はNoneを返します。これはモジュールレベルのmatchのコンパイル済みパターン版であり、同じパターンを複数の文字列に適用する場合にはるかに効率的です。オプションのパラメータ pos は、検索を開始する string 内のインデックスを指定します。デフォルトは
0です。これは文字列のスライスと完全には等価ではありません。'^'パターン文字は文字列の実際の先頭および改行の直後の位置にマッチしますが、検索を開始するインデックスでは必ずしもマッチしません。オプションのパラメータ endpos は string をどこまで検索するかを制限します。あたかも文字列が endpos 文字の長さであるかのように扱われ、pos から
endpos - 1までの文字のみが検索されます。endpos がNone(デフォルト)の場合は文字列全体が検索されます。
- search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'¶
このコンパイル済み正規表現がマッチを生成する最初の位置を探して string をスキャンし、
matchオブジェクトを返します。どの位置もマッチしない場合はNoneを返します。これはモジュールレベルのsearch()関数のコンパイル済みパターン版であり、同じパターンを複数の文字列に適用する場合にはるかに効率的です。オプションのパラメータ pos は、検索を開始する string 内のインデックスを指定します。デフォルトは
0です。これは文字列のスライスと完全には等価ではありません。'^'パターン文字は文字列の実際の先頭および改行の直後の位置にマッチしますが、検索を開始するインデックスでは必ずしもマッチしません。オプションのパラメータ endpos は string をどこまで検索するかを制限します。あたかも文字列が endpos 文字の長さであるかのように扱われ、pos から
endpos - 1までの文字のみが検索されます。endpos がNone(デフォルト)の場合は文字列全体が検索されます。
- sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str¶
このコンパイル済み正規表現を string 内で検索し、すべてのマッチを replace で置換して、新しい文字列を返します。これはモジュールレベルの
sub()関数のコンパイル済みパターン版であり、同じパターンを複数の文字列に適用する場合にはるかに効率的です。replace は文字列または関数を指定できます。文字列の場合は
\<number>および\g<number>の形式のエスケープシーケンスを使用して、対応するグループに展開できます(マッチしないグループの場合は空文字列になります)。replace が関数の場合は、単一の引数(マッチ)を取り、置換文字列を返す必要があります。count が指定され、かつ0でない場合は、その回数だけ置換を行った後に置換を停止します。flags 引数は無視されます。
Match オブジェクト¶
マッチオブジェクトは、成功したマッチの結果を保持します。
- class re.match(regex_str: str, string: str)¶
regex_str を string に対して文字列の先頭にアンカーして照合し、マッチオブジェクトを返します。マッチしない場合は
Noneを返します。これはモジュールレベルのショートカットです。re.match(regex_str, string)はre.compile(regex_str).match(string)と等価です。同じマッチオブジェクトは
search()、コンパイル済みパターンのregex.match()/regex.search()メソッドによっても返され、sub()で使用される置換関数にも渡されます。