Pythonで複数の文字列を削除したいとき
1.replaceを使う
文字列の置換といえば、Pythonの組み込み文字列メソッドreplace
が手軽で使いやすいですね。しかし、replace
は単独の置換にしか使えないので、コードが長くなりがちです。たとえば以下のようなケースです。
text = text.replace(',','')
text = text.replace('.','')
text = text.replace('!','')
text = text.replace('?','')
text = text.replace(':','')
text = text.replace(';','')
text = text.replace("'",'')
text = text.replace(' ','')
re.subを使う
このような「置換対象が複数ある」場合は、代わりにre.sub
を使うとシンプルにかけます。re
は正規表現モジュールです。
2.置換したい文字を全てリストアップするやり方
text = re.sub(r"[,.!?:;' ]", "", text)
re.sub
は3つの引数をとります。第3引数(この場合text
)は文字列操作対象で、第1引数を第2引数に変換します。replace
に第3引数を付け加えただけなので、replace
を使っている方も違和感なく使えると思います。第1引数にはリスト[]
の中に削除対象を列挙します。
3.置換したい文字を正規表現で表現するやり方
さらに、英数字以外を文字列から除去したいなら、
text = re.sub(r"\W", "", text)
でよいでしょう。\W
は正規表現で任意の英数字以外([^a-zA-Z0-9_]
)を意味します。よって[,.!?:;' ]
は全て削除されます。
まとめ
Pythonで複数の文字列を置換したいとき、1は簡潔でないので、2か3を使うとよいと思います。2は削除対象が特定できるときは確実ですが、手間がかかるのと、またすべての削除対象をカバーできるかが不安です。3は特定のマッチングにしか使えませんが、ずばりパターンを指定できれば最も簡潔かつ完全に意図通りの文字列置換ができます。