このページでは、Pythonで不要な文字列を削除する方法について、次の4通りのやり方を解説します。
- stripメソッド:両端の不要な文字列を削除する。
- replaceメソッド:指定の文字列を置換して削除する。
- translateメソッド:複数の指定の文字列を一度に置換して削除する。
- re.sub関数:複雑なパターンの文字列を置換して削除する。
それぞれに特徴がありますので、使いこなせるようになっておきましょう。
stripメソッドには注意点もありますので、しっかり確認頂ければと思います。なお、この中では、translateメソッドが、最も処理速度が早いようですので、それも覚えておくとよいでしょう。
1. stripメソッドで文字列を削除
stripメソッドには、
- strip:両端の不要な文字列を削除
- lstrip:左端の不要な文字列を削除
- rstrip:右端の不要な文字列を削除
の3つがあります。全て基本構文は同じで、次のように使います。
文字列.strip(削除する文字列)
それぞれ見ていきましょう。なお、
でも、詳しく解説していますので、併せてご確認いただければと思います。
1.1. stripで両端の不要な文字列を削除
strip() は文字列の先頭と末尾にある余分な文字を削除するメソッドです。
1.1.1. シンプルな削除
次の文字列には前後に余分な空白のスペースがありますね。stripメソッドの引数を空白にすると、このスペースを削除してくれます。
text = " Hello World "
text.strip()
次の例では、前後に不要な”a”が、いくつもくっついています。これを消したい場合は、「削除する文字列」に a を入力します。
text = "aaaaaHello Worldaaaaaa"
text.strip("a")
1.1.2. 前後の複数の文字を指定して削除
削除したい文字は、次のように、複数指定することができます。
text = "......Hello World,,,,,,,,"
text.strip("."",")
text = "ababHello Worldabca"
text.strip("a""b""c")
1.1.3. 単語の削除
次のように単語の削除も可能です。
text = "wordHello Worldword"
text.strip("word")
簡単ですね。
1.2. lstripで左端の不要な文字を削除
lstrip() は左端にある不要な文字列だけを削除するメソッドです。
次の例では、先ほどと違って、左側の空白スペースだけ削除されていますね。
text = " Hello World "
text.lstrip()
以下の例でも、左側の”a”だけが削除されています。
text = "aaaaaHello Worldaaaaaa"
text.lstrip("a")
1.3. rstripで右端の不要な文字を削除
rstrip()メソッドは、右端にある余分な文字のみを取り除くので、次のようになります。
text = " Hello World "
text.rstrip()
解説は省略します。
text = "aaaaaHello Worldaaaaaa"
text.rstrip("a")
1.4. strip系メソッドの注意点
strip系メソッドで、単語を削除する時には注意が必要です。以下をご覧ください。
text = "dog.jpeg"
text.strip(".jpeg")
このような場合は、stirp()メソッドは、文字列の末尾に連なっている、”.”、 “j”、 “p”、 “e”、 “g” をすべて取り去ってしまいます。
結果、 do が返されます。
取り除きたい文字列の連なりが分断されていれば、このようなことは起こりません。
text = "dog_a.jpeg"
text.strip(".jpeg")
これは起こりやすいミスなので気をつけましょう。
2. replaceメソッドで指定の文字列を削除
replaceメソッドは、「Pythonの文字列を置換する方法」で解説している通り、本来は、文字列を置換するためのメソッドです。しかし、これを利用して文字列を削除することもできます。
replaceメソッドの基本構文は次の通りです。
文字列.replace(置換したい文字列, 新しい文字, 置換回数)
「置換したい文字列」に削除したい文字列を、「新しい文字列」を空にすると、任意の文字列を削除することができます。
次の例をご覧ください。
text = "this is a textabcabcabc"
text.replace("abc", "")
右端の空白スペースが気になる場合は、次のようにreplaceメソッドの後に、stripメソッドを繋げる方法があります。
text.replace("abc", "").strip()
stripメソッドは両端の不要な要素を削除できますが、replaceメソッドでは、次のように、文字列の中にある不要な要素を削除することができます。
text = "this is a abcabcabc text"
text.replace("abc", "")
replaceメソッドを2回続けると、”a”の後ろの余分な半角スペースを削除することもできます。
text.replace("abc", "").replace("a ","a")
以下のページでは、replaceメソッドについて、より踏み込んで解説していますので、ぜひ一緒にご確認ください。
3. translateメソッドで複数の文字列を削除
translateメソッドは、複数の文字列を一度に置換したり削除したりできるので便利です。translateメソッドは、str.maketrans関数と合わせて使います。
以下の例のように使います。
text ="translate、allows・us・to・delete・multiple・letters。"
table = text.maketrans({
'、': ' ', #左が置換したい文字、右が新しい文字。
'。': '.', #左が置換したい文字、右が新しい文字。
'・': ' ', #左が置換したい文字、右が新しい文字。
})
print(text)
print(text.translate(table))
修正後と前を見比べてみると、一度に不要な文字列を削除したり置換したりできていますね。
最初は、少々複雑に見えるかもしれませんが、使えるようになっておくと良いと思います。
なぜなら、「Pythonで文字列から一部の文字を削除するときの速度比較」によるとtranslateメソッドによる削除は、処理速度がダントツに早いからです(注:Python3からはtranslateメソッドのunicodeは使わなくなっています)。
また、以下の記事でもtranslateメソッドを解説しています。
一緒に読んでいただくとtranslateメソッドの理解がより深まると思います。
4. re.sub関数で複雑な文字列を削除
reモジュールのsub関数も、「Pythonの文字列を置換する方法」で解説している通り、本来は、文字列を置換する時に利用するのが一般的ですが、文字列を削除する時にも使うことができます。
なおモジュールについては「Pythonのモジュールとは」をご覧ください。
sub関数の基本構文は次の通りです。
import re #最初にreモジュールをインポート。
re.sub(置換したい文字列(正規表現), 新しい文字列(正規表現), 対象の変数 [,置換回数])
正規表現とは
正規表現とは、簡単に言うと「様々な文字列を1つの文字列で表現する方法」です。「正規表現とは」で分かりやすく解説されているため、目を通して見てください。
なお、「正規表現」と聞くと、そちらの方がプログラミング言語的に正しい表記法と感じるかもしれませんが、そういうわけではありません。ただし正規表現を知っておくと、他のプログラミング言語にも応用が効くので、将来的には是非押さえておくと良いでしょう。
それでは例を見ていきましょう。次の例では、文字列の中のアルファベットを全て削除しています。
import re
text = "abc123def456ghi"
new_text = re.sub(r"[a-z]", "", text)
print(new_text)
第一引数(置換したい文字列)に入力している「r”[a-z]”」は、小文字のアルファベット全てを意味する正規表現です。「r」はraw string記法といって正規表現の時に入力を推奨されているものです。詳しくは、Pythonの公式ドキュメント「6.2. re – 正規表現操作」で解説されています。
第二引数には「””」と入力していますね。ダブルクオートの中に文字列を何も入力していませんので、削除と同じ意味になります。
第一引数(置換したい文字列)を「r”[1-9]”」とするとどうなるでしょうか。これは、整数全てを意味する正規表現なので、今度は、数値が削除されアルファベットだけが残ります。
new_text = re.sub(r'[1-9]', "", text)
print(new_text)
正規表現を理解すると、さらに複雑な文字列も削除できるようになります。
5. Pythonの文字列の改行・タブを削除する
strip系メソッドの引数を空白にした時は、空白スペースだけでなく、タブと改行も削除対象になります。また、replaceメソッドで、直接、タブや改行を指定することもできます。
なお、Pythonの文字列の改行の扱いについては、「Pythonの文字列の改行方法と便利な操作まとめ」をご覧ください。
次の例を見ておきましょう。
text = """
abcdef
ghijklm
"""
print(text)
print(text.strip())
text.replace("\n","")
replaceメソッドの場合は、改行を削除したい場合は「\n」、タブを削除したい場合は「\t」を入力します。
ただし、次のコードのように複数の改行系コードが入り乱れている時は注意が必要です。
''' 改行コードが入り乱れていても一度に置換(削除)できます。 '''
tanka = 'ふるさとの\r\n山に向ひて\n言ふことなし\r\nふるさとの山は\nありがたきかな'
print(tanka)
print('\n') # ←見やすいように改行を入れています。
print(tanka.replace('\r\n', '').replace('\n', ''))
これだとうまくいっていますが、replace()の重ねがけの順番を間違えると意図せぬ出力結果になってしまいます。
''' しかし順番を間違えると意図せぬ結果になってしまいます。 '''
print(tanka.replace('\n', '').replace('\r\n', ''))
このようなことが起きるので、複数の改行コード(例:\n, \t, \r, \r\n等)を削除したい場合はreplace()による置換ではなく、join()とsplitlines()による方法を使いましょう。
''' splitlines()とjoin()を利用すると、そうした不安はありません。 '''
print(''.join(tanka.splitlines()))
両メソッドについては、以下で解説しています。
ぜひご確認ください。
6. まとめ
いかがだったでしょうか。改めて、4つの方法の使いわけかたをまとめておきます。
- stripメソッド:端っこの文字列を削除する。
- replaceメソッド:指定の文字列を削除する。
- translateメソッド:複数の指定の文字列を一度に削除する。
- re.sub関数:複雑なパターンの文字列を削除する。
ぜひ参考にしてください。
コメント