Pythonで文字列内の最後に出現する語句だけを置き換える方法
はじめに
Pythonで文字列を置き換える際、str.replace()メソッドを使うのが一般的ですが、このメソッドはデフォルトで先頭から置き換えを行います。では、文字列内の最後に出現する語句だけを置き換えたい場合はどうすればよいのでしょうか。
本記事では、その問題を解決する2つの実用的な方法を紹介します。
方法1:文字列を反転させて置き換える
この方法の考え方はシンプルです。以下の手順で処理を行います。
- 元の文字列を反転させる
- 置き換え対象の文字列も反転させる
- 反転した状態で1回だけ置き換えを実行する
- 最後に結果の文字列を再度反転させて元の順序に戻す
Pythonではスライス記法 [::-1] を使うことで、文字列を簡単に反転できます。また、str.replace(old, new, count) の第3引数 count に 1 を指定すると、最初の1箇所だけを置き換えられます。
コード例
def rreplace(s, old, new):
return (s[::-1].replace(old[::-1], new[::-1], 1))[::-1]
rreplace('Hello world, hello world, hello world', 'hello', 'hi')出力結果
'Hello world, hello world, hi world'
反転によって「最後の出現」が「最初の出現」になるため、replace の第3引数に 1 を渡すだけで目的の位置を置き換えられるのがポイントです。
方法2:rsplit()を使って右側から分割・結合する
より直感的な方法として、str.rsplit() メソッドを使うアプローチがあります。rsplit() は文字列を右側から分割するメソッドで、第2引数に 1 を指定すると、最後に出現する区切り文字でのみ分割されます。
コード例
def rreplace(s, old, new):
li = s.rsplit(old, 1) # 最後の1箇所のみで分割
return new.join(li)
rreplace('Hello world, hello world, hello world', 'hello', 'hi')出力結果
'Hello world, hello world, hi world'
この方法では、rsplit(old, 1) によって文字列が「最後の出現箇所」を境に2つの要素に分割され、それらを new.join(li) で新しい文字列を使って結合し直しています。
どちらの方法を選ぶべきか?
- rsplit()方式:コードが簡潔で可読性が高く、特別な理由がなければこちらが推奨されます。
- 反転方式:スライスと
replace()の組み合わせというPythonらしいテクニックで、他の場面でも応用が利きます。
どちらの方法も正規表現を必要とせず、標準の文字列操作だけで実装できる点が魅力です。用途に応じて使い分けてください。
-
【Python】文字列内の部分文字列が最後に出現するインデックスを取得する方法
Pythonでは、rfind()メソッドを使うことで、文字列の中に部分文字列が最後に出現する位置(インデックス)を簡単に調べることができます。 rfind()メソッドの基本 rfind()は、文字列の末尾から前方に向かって部分文字列を検索するメソッドです。動作は以下の通りです。 部分文字列が見つかった場合 → 最後に出現した位置のインデックスを返す 見つからなかった場合 → -1 を返す 使用例 >>> some of the some.rfind(some) 12 >>> some of the some.rfind(none) -1 >>
-
【初心者向け】Pythonで文字列の長さを取得する方法をわかりやすく解説
Pythonで文字列の長さを取得する基本:len()関数Pythonには、文字列やリスト、タプルといった複合オブジェクトの長さ(要素数)を取得できる組み込み関数 len() が用意されています。文字列の長さを知りたい場合は、対象の文字列をそのまま len() の引数として渡すだけでOKです。print(len(abcdefghijklmnopqrstuvwxyz))出力結果:26変数に格納した文字列の長さを取得する実際の開発では、変数に代入した文字列の長さを調べる場面が多いでしょう。次のように、変数を len() に渡すだけで簡単に取得できます。text = Hello, Python! pr