Python

【Python】文字列のプレフィックス(接頭辞)とサフィックス(接尾辞)を削除する方法

この記事では、Pythonで文字列のprefix(プレフィックス: 接頭辞)、またはsuffix(サフィックス: 接尾辞)を削除する方法を解説します。

Python 3.9でstr型に追加されたremoveprefix()メソッドやremovesuffix()メソッドを使うことで接頭辞や接尾辞を削除した文字列のコピーを取得することができます。

str型には同じような機能を持つrstripメソッドやlstripメソッドがありますが、これらの関数は大抵記号を削除するのに使われます。

それでは、使い方を見ていきましょう!

プレフィックス(接頭辞)を削除する

任意の文字列のプレフィックス(接頭辞)を削除するには、str.removeprefix()メソッドを使います。このメソッドはPython 3.9で追加されました。

str.removeprefix(prefix, /)
引数の「/」は、これより前に記述されている引数を位置専用引数にします

文字列がprefix引数で始まる場合、string[len(prefix):]を返す。

s = 'Helloworld'

rps = s.removeprefix('Hello')
print(f'元: {s}, 削除後: {rps}')

実行結果

元: Helloworld, 削除後: world

文字列がprefix引数で始まらない場合、文字列のコピーがそのまま返される。

s = 'Helloworld'

rps = s.removeprefix('abc')
print(f'元: {s}, 削除後: {rps}')

実行結果

元: Helloworld, 削除後: Helloworld

prefixは位置専用引数なのでキーワード引数として指定するとTypeErrorとなる。

s = 'Helloworld'

rps = s.removeprefix(prefix='Hello')

実行結果

Traceback (most recent call last):
  File "/Users/user/Desktop/Python/test.py", line 3, in 
    rps = s.removeprefix(prefix='Hello')
TypeError: str.removeprefix() takes no keyword arguments

サフィックス(接尾辞)を削除する

任意の文字列のサフィックス(接尾辞)を削除するには、str.removesuffix()メソッドを使います。このメソッドはPython 3.9で追加されました。

str.removesuffix(suffix, /)

文字列がsuffix引数で終わる場合、string[:-len(suffix)]を返す。

s = 'Helloworld'

rss = s.removesuffix('world')
print(f'元: {s}, 削除後: {rss}')

実行結果

元: Helloworld, 削除後: Hello

文字列がsuffix引数で終わらない場合、文字列のコピーがそのまま返される。

s = 'Helloworld'

rss = s.removesuffix('abc')
print(f'元: {s}, 削除後: {rss}')

実行結果

元: Helloworld, 削除後: Helloworld

どちらも削除したい場合

接頭辞および接尾辞を削除したい場合はstr.stripメソッドを使います。

s = '[Helloworld]'

rs = s.strip('[]')
print(f'元: {s}, 削除後: {rs}')

実行結果

元: [Helloworld], 削除後: Helloworld

文字列の空白を削除する方法

使い分け

1種類の記号や文字列を削除したい場合はremoveprefixメソッドやremovesuffixメソッドを使い、複数の記号や文字を削除したい場合はrstripメソッドやlstripメソッドを使います。

removeprefixメソッドやremovesuffixメソッドは、指定した文字列が完全に一致した場合に削除するのに対してrstripメソッドやlstripメソッドは文字単位で削除していきます。

例えば、以下のような厄介な記号で始まる文字列があったとして、

s = '[(<([: 文字列'

removeprefixメソッドでは完全に一致する文字列を指定しなければ削除できないのに対し、

s = '[(<([: 文字列'

rps = s.removeprefix('[(<([: ')
print(f'元: {s}, 削除後: {rps}')

実行結果

元: [(<([: 文字列, 削除後: 文字列

rstripメソッドでは使われる記号を指定すれば勝手に削除してくれる。

s = '[(<([: 文字列'

rps = s.lstrip('[<(: ')
print(f'元: {s}, 削除後: {rps}')

実行結果

元: [(<([: 文字列, 削除後: 文字列

このように、指定した文字列が完全一致した際に削除したいのか指定した文字列に含まれる文字を削除したいかで使い分けることができます。