正規表現とパターン照合

Python正規表現テストreの結果をそのまま確認

パターンと文章を入力し、実際のPythonで検索・全体照合・置換を手動実行します。

Python正規表現テスト

パターン

テスト文字列

結果

入力または手動テストを待っています。

式と文章はこのブラウザー内で処理します。Pythonのファイルは初回実行時に読み込みます。

オプション

i、m、s、x、aを重複なく指定します。JavaScriptのgはありません。
  • i — 大文字と小文字を無視
  • m — ^と$を行境界に適用
  • s — ピリオドを改行にも一致
  • x — 空白を無視しコメントを許可
  • a — 文字クラスをASCIIに限定

Python実行環境:初回テストで読み込み

上限:式2000、文章100000、置換10000 UTF-16単位。一致10000件、出力100万単位、報告400万単位まで。実行が2秒を超えると停止します。

入力または手動テストを待っています。

注文番号と担当者名を同じログ行から取り出すとき、括弧を一つ変えただけで取得する列がずれることがあります。(?P<id>...)を小さな例で試し、一覧の値と範囲を見比べれば、アプリ側に移す前にずれを見つけられます。

Python正規表現と正規表現テスターを使い分けたいときは、finditer、search、fullmatchを比較してください。キャプチャグループの位置はUnicodeコードポイントで示し、置換にはPythonの\g<name>を使います。

Python正規表現テストを使う理由

捕獲した範囲を分けて見る

Python正規表現テストでは、全体の一致と番号付き・名前付きグループを並べて確認できます。参加しなかったグループはnullと(-1, -1)、空文字を捕獲したグループは空文字として区別します。

青い一致範囲の内側に二つの色分けされた捕獲範囲があり、それぞれ結果カードにつながる。

元の文章を残して置換を試す

\g<last>と\g<first>で順序を入れ替えると、re.subnの結果を別の欄で確認できます。置換回数が0なら全件が対象です。入力そのものは書き換えません。

元の二つの色付き部分が右側のプレビューで入れ替わり、左側の原文は残っている。

見落としやすいreの動作を確かめる

01

照合方法を先に選ぶ

finditerは重ならない一致を列挙し、searchは最初の一致を探します。fullmatchは文章全体への一致が必要です。JavaScriptのgフラグはありません。

02

フラグを決めてから実行

i、m、s、x、aはPythonのフラグです。mは^と$の行境界を変え、sはピリオドを改行にも一致させます。初回の手動実行でPythonを読み込みます。

03

位置と鮮度を確認して出力

位置は0始まり・終端を含まないUnicodeコードポイントです。A😀BのBは2から始まります。Ctrl/Cmd + Enterでも再実行でき、編集後は古い結果を出力できません。

一致結果に含まれる情報

実際のCPython re

Python正規表現テストはPyodideをWorkerで動かし、実際のPythonバージョンを表示します。JavaScriptのRegExpをPythonとして表示しません。

グループと文字位置

group 0、番号、名前、値、範囲を一覧にします。絵文字を含む文章ではコードポイント位置をUTF-16位置へ変換し、ハイライトのずれを防ぎます。

Python式の置換

置換プレビューはre.subnを使用します。\1と\g<name>は展開され、空のテンプレートは一致部分を削除します。$1はそのままの文字列です。

完了した結果だけ出力

正常に終わった場合だけ、実行方法、フラグ、パターン、Pythonバージョン、全一致を含むJSONをコピーまたは保存できます。

このテストで扱う範囲

Pythonのreだけを実行
Python正規表現テストはUnicode文字列をCPython reで評価します。PCRE2、JavaScript、第三者製regexパッケージへエンジンを切り替えません。
自動実行しない
高負荷の式は手動で開始します。Pythonの読み込み後、照合が2秒を超えるとWorkerを終了し、途中の結果を「一致なし」として返しません。
使えるフラグを限定
i、m、s、x、aを一度ずつ指定できます。g、u、yはPythonの文字列パターン用フラグではなく、全件検索はfinditerで選びます。
入力と結果の上限
パターン2000、文章100000、置換文字列10000 UTF-16単位まで。10000件を超える一致や大きすぎる出力・報告書は一括で失敗します。
任意のコードは実行しない
決められたre操作だけを呼びます。Pythonスクリプトの実行、ファイル読み込み、URL取得、入力を含む共有リンクはありません。
置換はプレビューだけ
re.subnは別の結果を作ります。入力を変更するサンプル読込と消去は事前確認が必要で、一度だけ元に戻せます。

Python正規表現テストのよくある質問

regex101で動いた式がPythonで失敗するのはなぜですか?

regex101で選んだエンジンを確認してください。既定のPCRE2とPythonのreには違いがあります。Pythonの名前付きグループは(?P<name>...)です。

Pythonのre.subによる置換を試せますか?

はい。置換を選び、\g<name>や\1を含むテンプレートを入力します。$1はグループ参照にはならず、元の文章は変更されません。

Pythonの一致箇所とグループをオンラインで見られますか?

見られます。一致をハイライトし、グループの値と範囲を表示します。幅0の一致は位置マーカーで示します。

.*?が.*より安全な場合があるのはなぜですか?

前者は短い一致から、後者は長い一致から試します。ただしどちらも実行時間の安全を保証しません。境界例で試してください。

(...)と(?:...)はどう違いますか?

どちらも式をまとめますが、(...)だけが番号付きの捕獲を作ります。(?:...)は番号を使わず、置換で参照できる捕獲も増やしません。

解決しませんでしたか?

実例でPython正規表現テストを試す

一致する例としない例を並べ、グループと実際のPythonバージョンを確認してから報告書を保存しましょう。