【Python】文字列の先頭・末尾を安全に削除するremoveprefixとremovesuffix

Python 3.9以降、文字列操作において特定の接頭辞(Prefix)や接尾辞(Suffix)を削除するための専用メソッド removeprefix()removesuffix() が追加されました。

従来、文字列のトリミングには lstrip()rstrip()、あるいはスライス機能が使われていましたが、これらは意図しない文字まで削除してしまうリスクや、コードの可読性が低いという課題がありました。新しいメソッドを使用することで、より直感的かつ安全に不要な文字列を除去できます。

目次

メソッドの特徴

  • str.removeprefix(prefix): 文字列が指定した prefix で始まる場合、それを削除した新しい文字列を返します。一致しない場合は元の文字列をそのまま返します。
  • str.removesuffix(suffix): 文字列が指定した suffix で終わる場合、それを削除した新しい文字列を返します。一致しない場合は元の文字列をそのまま返します。

実装例:商品コードの正規化処理

以下は、データベースやAPIから取得した「プレフィックス(接頭辞)」と「サフィックス(接尾辞)」付きの商品コードを、純粋なID番号に正規化するコード例です。

def main():
    # システム連携などで付与された装飾付きの商品コード
    raw_product_code = "PROD_987654_v2"

    print(f"処理前のコード: {raw_product_code}")

    # 1. 先頭の 'PROD_' を削除する (removeprefix)
    # 文字列が "PROD_" で始まっている場合のみ削除されます。
    # Python 3.9未満では動作しないため注意が必要です。
    code_step1 = raw_product_code.removeprefix("PROD_")
    
    print(f"プレフィックス削除後: {code_step1}")

    # 2. 末尾の '_v2' を削除する (removesuffix)
    # 文字列が "_v2" で終わっている場合のみ削除されます。
    clean_id = code_step1.removesuffix("_v2")

    print(f"サフィックス削除後: {clean_id}")

    # --- 補足: 一致しない場合の挙動 ---
    # 指定した文字列が存在しない場合は、元の文字列がそのまま返されます。
    no_change = raw_product_code.removeprefix("UNKNOWN_")
    print(f"一致しない場合: {no_change}")

if __name__ == "__main__":
    main()

注意点:lstrip / rstrip との違い

従来の lstrip()rstrip() は「指定された文字セットのいずれか」を削除するメソッドです。特定の単語を削除する目的で使用すると、意図しない挙動を引き起こすことがあります。

誤った使用例(lstripの場合):

# "PROD_" という「文字列」ではなく、'P','R','O','D','_' の「文字」が削除される
text = "PROD_D001"
print(text.lstrip("PROD_")) 
# 結果: "001" (期待値は "D001" だが、Dも削除されてしまう)

対して removeprefix は文字列全体が完全に一致した場合のみ削除を行うため、上記のような事故を防ぐことができます。Python 3.9以上の環境であれば、可読性と安全性の観点から removeprefix / removesuffix の使用が推奨されます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次