1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

python文字列削除処理の備忘録

Posted at

概要

Pythonで文字列を削除するときにちょっとはまったので備忘のため記載
rstrip,lstripを何気なく使っているとはまるかもしれません。

現象

以下のようにファイル名の接頭辞または接尾辞を削除するときについlstripまたはrstripを使いたくなってしまうかもしれません。


fileName='test_出力ファイル_20191217_001.xlsx'
# 接頭辞を削除
print(fileName.lstrip('test_'))
# 出力ファイル_20191217_001.xlsx

# 接尾辞を削除
print(fileName.rstrip('.xlsx'))
# test_出力ファイル_20191217_001


出力結果としては問題なさそうですがここで文字列が以下のような場合に問題が発生します。


fileName='test_est_出力ファイル_20191217_001xsls.xlsx'
# 接頭辞を削除
print(fileName.lstrip('test_'))
# 出力ファイル_20191217_001xsls.xlsx

# 接尾辞を削除
print(fileName.rstrip('.xlsx'))
# test_est_出力ファイル_20191217_001

test_だけまたは.xlsxだけが消えてほしいのにほかの文字も消えてしまっています。
原因はlstripまたはrstripで削除するのは指定した文字列と一致するものを削除しているためです。

接頭辞で消しているパターンの場合 test_ のいずれかの文字を削除しています。
接尾辞の場合は .xlsxのいずれかを削除しています。

こういったときに接頭辞または接尾辞を削除したいときは
re を使って正規表現で削除するのがよさそうです。
例の場合ですと

import re

fileName='test_出力ファイル_20191217_001.xlsx'
# 接頭辞を削除
print(re.sub("^test_", "", fileName))
# 出力ファイル_20191217_001.xlsx

# 接尾辞を削除
print(re.sub(".xlsx$", "", fileName))
# test_出力ファイル_20191217_001

としっかりと接頭辞または接尾辞を削除できます。

以下のようにlstripまたはrstripでうまくいかなかった例もうまくいきます。

import re

fileName='test_est_出力ファイル_20191217_001xsls.xlsx'
# 接頭辞を削除
print(re.sub("^test_", "", fileName))
# est_出力ファイル_20191217_001xsls.xlsx


# 接尾辞を削除
print(re.sub(".xlsx$", "", fileName))
# test_est_出力ファイル_20191217_001xsls

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?