この記事では、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}')
実行結果
元: [(<([: 文字列, 削除後: 文字列
このように、指定した文字列が完全一致した際に削除したいのか指定した文字列に含まれる文字を削除したいかで使い分けることができます。