閉じる

【Python】strip/lstrip/rstripの違いと使い分け(文字列の空白削除)

文字列から余計な空白や改行を取り除く処理は、入力の前処理やファイルの行処理などで必須です。

本記事ではPythonのstriplstriprstripの違いと正しい使い分けを、初心者の方にも分かりやすく、具体例とともに丁寧に解説します。

目的に合わない使い方をすると意図せず文字が消えるため、注意点もまとめて理解していきます。

Pythonのstrip/lstrip/rstripとは?(空白削除の基本)

デフォルトは前後の空白(スペース/タブ/改行)を削除

striplstriprstripは、引数なしで使うと空白文字(スペース、タブ、改行など)を削除します。

stripは前後の両方、lstripは先頭のみ、rstripは末尾のみが対象です。

例(デフォルトの空白削除)

Python
# 前後に空白(スペース、タブ、改行)を含む文字列
s = " \t  hello world  \n"

# repr()で見えない文字(改行・タブ)も確認できるようにする
print("orig :", repr(s))
print("strip:", repr(s.strip()))   # 前後の空白を削除
print("lstrip:", repr(s.lstrip())) # 先頭の空白を削除
print("rstrip:", repr(s.rstrip())) # 末尾の空白を削除
実行結果
orig : ' \t  hello world  \n'
strip: 'hello world'
lstrip: 'hello world  \n'
rstrip: ' \t  hello world'

ここでの空白は、スペース、タブ(\t)、改行(\n)などを含みます。

Unicodeの空白も対象です。

文字列内部の空白は削除しない

内部(単語間)の空白はそのまま残ります。

削除されるのはあくまで前後だけです。

例(内部の空白は残る)

Python
s = "  hello   world  "
print(repr(s.strip()))  # 内部の3つのスペースは維持される
実行結果
'hello   world'

内部の空白を詰めたい場合はsplitや正規表現を使う別アプローチが必要です(本記事では扱いません)。

lstripは先頭のみ、rstripは末尾のみ

どちら側を削除したいかで使い分けます。

例(左右の違い)

Python
s = "\n\n  data  \t"
print("lstrip:", repr(s.lstrip()))  # 左側(先頭)だけ削除
print("rstrip:", repr(s.rstrip()))  # 右側(末尾)だけ削除
実行結果
lstrip: 'data  \t'
rstrip: '\n\n  data'

先頭か末尾かを正しく選ぶことが、意図しない削除を防ぐ第一歩です。

strip/lstrip/rstripの違いと使い分け

基本の使い分けを短くまとめると次の通りです。

メソッド対象デフォルトで削除するもの主な用途
strip()前後空白文字(スペース/タブ/改行など)入力データの前後トリム
lstrip()先頭同上先頭側だけ整形
rstrip()末尾同上行末の改行や余白を除去

以降で実例を示します。

前後の空白をまとめて消す(strip)

フォーム入力やCSVのセル文字列など、とにかく前後の余計な空白をまとめて取りたいときはstrip()を使います。

例(フォーム入力のトリム)

Python
raw = "  Alice  "
name = raw.strip()  # 前後の空白を除去
print(repr(name))
実行結果
'Alice'

行末の改行だけ消す(rstrip(“\n”))

行単位の処理では、末尾の改行だけを確実に取り除くのが基本です。

引数なしのrstrip()はスペースやタブも消えてしまうため、rstrip("\n")のように改行だけを明示します。

例(改行のみ削除)

Python
line = "value\twith\tspaces and tabs\n"
print("raw:", repr(line))
print("rstrip():", repr(line.rstrip()))       # 末尾のタブ/スペースも消える
print('rstrip("\\n"):', repr(line.rstrip("\n")))  # 改行だけ消える
実行結果
raw: 'value\twith\tspaces and tabs\n'
rstrip(): 'value\twith\tspaces and tabs'
rstrip("\n"): 'value\twith\tspaces and tabs'

最初のrstrip()は改行に加えて末尾の空白も削除します。

末尾の空白を保持したいならrstrip("\n")が安全です。

末尾の空白やカンマを整える(rstrip(“, “))

CSV風の出力で最後に余分なカンマやスペースが付く場合、rstrip(", ")で後ろに並んだカンマやスペースをまとめて落とせます。

例(末尾の区切りを整形)

Python
s = "apple, banana, cherry, "
print("before:", repr(s))
print("after :", repr(s.rstrip(", ")))  # 末尾に連なる','と' 'をすべて除去
実行結果
before: 'apple, banana, cherry, '
after : 'apple, banana, cherry'
注意

rstrip(", ")末尾に連なっている間は何個でも削除します。

末尾が”, , , “のようになっていても全部消えます。

先頭の記号や余白を除去(lstrip)

ログやプロンプト記号など、行頭に特定記号や余白が付くときはlstrip()が有効です。

例(行頭の記号を落とす)

Python
line = ">>>    result = 42"
clean = line.lstrip(" >")  # ' 'と'>'のいずれかが続く限り削除
print(repr(clean))
実行結果
'result = 42'

文字指定のstripの挙動と注意点

引数は文字集合として扱われる(並びは無関係)

引数は「文字集合」として扱われ、並び順やまとまりは意味を持ちません

端から見て、その集合に含まれる文字である限り連続して削除されます。

例(集合としての削除)

Python
s = "abcXYZcba"
print(s.strip("abc"))  # 'a','b','c'のいずれかを端から除去
実行結果
XYZ

ここでは「abc」という並びを消すのではなく、{'a', 'b', 'c'}の文字が端にある限り落とされます。

空白以外の不要文字も削除(strip(“0/”))

ゼロやスラッシュなど、空白以外の端の不要文字も指定できます。

例(ゼロとスラッシュを落とす)

Python
s = "0001/02/03///"
print(repr(s.strip("0/")))     # 端の'0'と'/'を削除
print(repr(s.lstrip("0/")))    # 左側だけ
print(repr(s.rstrip("0/")))    # 右側だけ
実行結果
'1/02/03'
'1/02/03///'
'0001/02/03'

注意: 端にある限り指定した文字は何文字でも削除されます。

正規表現ではない(パターンは使えない)

正規表現パターンは使えません

strip(r"\d")のように書いても数字を意味せず、'''d'という2文字の集合になります。

例(正規表現ではない)

Python
s = r"\d123d"
print(repr(s.strip(r"\d")))  # '\' と 'd' を端から削除するだけ
実行結果
'123d\'

正規表現で端のパターンを削除したい場合はre.sub()など別手段を使います(本記事では割愛します)。

片側だけ削除する場合の指定(lstrip(chars)/rstrip(chars))

左側だけ右側だけに対しても、同様に文字集合を渡せます。

例(片側の不要記号を削る)

Python
s = "...Hello world!!!"
left_clean  = s.lstrip(".")       # 左の'.'だけ落とす
right_clean = s.rstrip("!?.")     # 右の'!','?','.'だけ落とす
print(repr(left_clean))
print(repr(right_clean))
実行結果
'Hello world!!!'
'...Hello world'

誤用注意: 例えばURLから"https://"を消す目的でlstrip("https:/")とすると、集合として扱われるため想定外の文字まで落ちる可能性があります。

removeprefix("https://")の方が安全です。

よくある失敗と対策(空白削除)

特定の語を消したいならstripは不適(前後の文字集合しか削除しない)

特定の単語や接頭辞を消したいのにstripを使うのは不適切です。

strip("prefix_"){'p','r','e','f','i','x','_'}の集合として処理され、両端のそれらの文字をすべて落とすだけです。

例(誤用と正しい代替)

Python
s = "prefix_title_suffix"
print(s.strip("prefix_"))          # 誤用: 端の文字集合を削るだけ。末尾も条件に合う文字が削れてしまう

# 正しい代替(接頭辞と接尾辞を語として扱う)
print(s.removeprefix("prefix_"))   # Python 3.9+
print(s.removesuffix("_suffix"))   # Python 3.9+

# 語の内部を置換したいならreplace
print(s.replace("prefix_", ""))    # 必要に応じて
実行結果
title_su
title_suffix
prefix_title
title_suffix

「語としての削除」はremoveprefix/removesuffixreplaceを選びます。

改行は\r\nの両方を考慮する(rstrip(“\r\n”))

Windowsのテキストは\r\nで終わることが多く、rstrip("\n")だけだと\rが残る場合があります。

rstrip("\r\n")で両方に対応します。

例(Windows改行の処理)

Python
win_line = "hello\r\n"
print(repr(win_line.rstrip("\n")))    # '\r'が残る
print(repr(win_line.rstrip("\r\n")))  # 両方消える
実行結果
'hello\r'
'hello'

ファイルの1行処理はline.rstrip(“\n”)が基本

ファイルからの各行処理では末尾の改行だけを確実に落とし、行末の空白は保持したいことが多いためrstrip("\n")が基本です。

Windowsも考慮するならrstrip("\r\n")が堅実です。

例(行ごとの読み取りと整形)

Python
# 実ファイルがない環境向けのデモ用: 行のリストを仮定
lines = ["alpha \n", "beta\t\n", "gamma\r\n"]

print([line.rstrip("\n") for line in lines])     # 改行のみ除去
print([line.rstrip("\r\n") for line in lines])   # Windowsも考慮
実行結果
['alpha ', 'beta\t', 'gamma\r']
['alpha ', 'beta\t', 'gamma']

目的に応じてどちらを使うか選びます。

数値文字列の先頭0をstripすると末尾0も消える

よくある落とし穴として、先頭の0だけ落としたいのにstrip("0")を使うと、末尾の0も消えてしまいます。

左側だけならlstrip("0")を使います。

例(先頭ゼロの除去)

Python
s = "0012300"
print(s.strip("0"))   # 両端の'0'を削除 → 末尾の0も消える
print(s.lstrip("0"))  # 左側の'0'だけ削除
print(int(s))         # 数値化してしまうのも手(ただし空文字や非数字は例外)
実行結果
'123'
'12300'
12300

数値として扱うなら型変換int()が確実です。

ただし空文字や非数字は例外になる点に注意します。

まとめ

strip系は「端から文字集合を削る」道具です。

引数なしなら空白全般、引数ありなら指定した文字の集合を、stripは前後、lstripは先頭、rstripは末尾から削除します。

内部の空白は対象外で、正規表現は使えません

行処理ではrstrip("\n")rstrip("\r\n")を使い、接頭辞・接尾辞を語として扱う場合はremoveprefix/removesuffixを選ぶと安全です。

「文字集合」になる性質を意識すれば、意図しない文字消失を防げます。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!