Pythonの正規表現で括弧(カッコ)をマッチさせて削除する方法
Pythonの正規表現を使えば、文字列に含まれる括弧「(」と「)」を簡単に検索・抽出・削除できます。この記事では、標準ライブラリのreモジュールを使って、文字列から括弧をマッチさせる方法と、括弧をすべて取り除く方法を、具体的なコード例と実行結果とともにわかりやすく解説します。
括弧を正規表現でマッチさせる基本
正規表現において、括弧 ( ) はグループ化を意味する特殊文字として扱われるため、そのまま書いてもリテラルとしてはマッチしません。括弧そのものを検索したい場合は、バックスラッシュ \ でエスケープし、\( \) のように記述する必要があります。
以下のコードは、文字列 s の中から空の括弧「()」を検索し、さらに別の文字列 s1 から括弧をすべて削除する例です。
コード例
import re # 括弧「()」を検索する s = 'I love book()' result = re.search(r'\(\)', s) print(result.group()) # 括弧をすべて削除する s1 = 'I love book(s)' result2 = re.sub(r'[\(\)]', '', s1) print(result2)
実行結果
このコードを実行すると、次のような出力が得られます。
() I love books
コードのポイント解説
1. 括弧のエスケープ:\( \)
re.search(r'\(\)', s) の部分では、パターン \(\) を使ってリテラルの「()」を検索しています。文字列の先頭に r を付けた生文字列(raw string)を使うことで、バックスラッシュの扱いがシンプルになり、意図しないエスケープ処理を防げます。
2. 文字クラスで両方の括弧を指定:[\(\)]
re.sub(r'[\(\)]', '', s1) では、文字クラス [...] の中に \( と \) を並べることで、「(」または「)」のどちらかにマッチさせ、空文字列へ置換(=削除)しています。その結果、「I love book(s)」から括弧が取り除かれ、「I love books」という出力になります。
3. 文字クラス内ならエスケープは必須ではない
補足として、文字クラスの中では括弧は特別な意味を持たないため、[()] のようにエスケープせずに記述することも可能です。ただし、可読性や他の環境との互換性を考えると、エスケープしておくのが安全です。
まとめ
Pythonで括弧を正規表現にマッチさせるには、\( や \) のようにエスケープするのが基本です。単純な検索には re.search()、置換や削除には re.sub() を使い分けることで、文字列内の括弧を柔軟に操作できます。ログ解析やデータクリーニングなど、実際のテキスト処理でも応用範囲の広いテクニックなので、ぜひ覚えておきましょう。
-
【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法
次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ
-
Pythonの正規表現における修飾子(フラグ)の使い方と機能一覧
Python正規表現の修飾子とはPythonのreモジュールでは、正規表現によるパターンマッチングの挙動を制御するために、さまざまな修飾子(フラグ)を指定することができます。これらの修飾子を使うことで、大文字小文字の区別や改行の扱いなど、マッチングの動作を柔軟に変更できます。以下に、主要な修飾子とその機能を一覧形式で紹介します。1. re.I(re.IGNORECASE)大文字と小文字を区別せずにマッチングを行います。英字の大小を無視したい場合に便利です。2. re.L(re.LOCALE)現在のロケール設定に従って単語を解釈します。このフラグは、アルファベット系のグループ(\w および \W