【Python】Python ~ 基本編 / 先頭・末尾の文字列除去 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/10/12/075251

の続き。

Python は使いやすい言語だと思うが、いけていない点がある。
今回は、その中の一部で「先頭・末尾の文字列除去」について扱う
(例えば、http://xxxx/xxxxって際に「xxxx/xxxx」を抜き出したい場合など)

目次

【1】strip
 1)先頭/末尾のTrim : strip()
 2)先頭のTrim : lstrip()
 3)末尾のTrim : rstrip()
【2】使用上の注意
 別解:strip() を使わないで、先頭/末尾のTrimを行うには

【1】strip

* 基本は、strip()
 => ただ、後述「【2】使用上の注意」で述べるが
  仕様を分かっていないと、意図しない動きになる

cf strip = はぐ、むく、取り除く、服を脱ぐ

1)先頭/末尾のTrim : strip()

# 除去後の文字例 = str.strip(除去したい文字)
result = "!!!Hello!!!World!!!!".strip("!")
# Hello!!!World
print result

2)先頭のTrim : lstrip()

# lstrip() => Left strip
result = "http://localhost".lstrip("http://")
# result = "http://localhost".lstrip("htp://") でも同じこと
# (詳細は、以下の「使用上の注意」を参照のこと)

# localhost
print(result)

3)末尾のTrim : rstrip()

# rstrip() => Left strip
result = "s3://your-bucket/aaa/bb/ccc/".rstrip("/")
# s3://your-bucket/aaa/bb/ccc
print(result)

【2】使用上の注意

* strip() の引数は、
「除去したい文字」であって「除去したい文字列」ではない

サンプル

result = "http://localhost".strip("http://")
# localhos (<="t"が消えてしまう!)
print(result)

※ 原因に関する補足説明

# はじめ、原因が全く分からなかった、、、

今回の場合、「h」「t」「p」「:」「/」が前後にあれば消すので
後ろ側の「t」も消してしまったことになる。

https://rcmdnk.com/blog/2016/05/09/computer-python/
https://www.headboost.jp/python-strip/

別解:strip() を使わないで、先頭/末尾のTrimを行うには

* Pythonのバージョンによって対応が異なる

Python3.9以降の場合

* 「removeprefix」「removesuffix」が使えるらしい

https://docs.python.org/ja/3.9/library/stdtypes.html#str.removeprefix
https://docs.python.org/ja/3.9/library/stdtypes.html#str.removesuffix

Python3.9未満の場合

#==============================
# 先頭の文字列除去
#==============================
target_str = "s3://your-bucket-name/xxx/yyyy1"
result = target_str[len("s3://"):] if target_str.startswith("s3://") else target_str
# your-bucket-name/xxx/yyyy1
print(result)

target_str = "your-bucket-name/xxx/yyyy2"
result = target_str[len("s3://"):] if target_str.startswith("s3://") else target_str
# your-bucket-name/xxx/yyyy2
print(result)

#==============================
# 末尾の文字列除去
#==============================
target_str = "http://localhost/index.html"
result = target_str[0: len(target_str) - len("/index.html")] if target_str.endswith("/index.html") else target_str
# http://localhost
print(result)

target_str = "http://localhost"
result = target_str[0: len(target_str) - len("/index.html")] if target_str.endswith("/index.html") else target_str
# localhost
print(result)

関連記事

Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251