LoginSignup
28
18

More than 3 years have passed since last update.

Pythonで複数の文字列を削除したい ー re.subを使う

Last updated at Posted at 2019-05-17

Pythonで複数の文字列を削除したいとき

1.replaceを使う

 文字列の置換といえば、Pythonの組み込み文字列メソッドreplaceが手軽で使いやすいですね。しかし、replaceは単独の置換にしか使えないので、コードが長くなりがちです。たとえば以下のようなケースです。

sample1.py
   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.置換したい文字を全てリストアップするやり方

sample2.py
   text = re.sub(r"[,.!?:;' ]", "", text)

 re.subは3つの引数をとります。第3引数(この場合text)は文字列操作対象で、第1引数を第2引数に変換します。replaceに第3引数を付け加えただけなので、replaceを使っている方も違和感なく使えると思います。第1引数にはリスト[]の中に削除対象を列挙します。

3.置換したい文字を正規表現で表現するやり方

さらに、英数字以外を文字列から除去したいなら、

sample3.py
   text = re.sub(r"\W", "", text)

 でよいでしょう。\Wは正規表現で任意の英数字以外([^a-zA-Z0-9_])を意味します。よって[,.!?:;' ]は全て削除されます。

まとめ

 Pythonで複数の文字列を置換したいとき、1は簡潔でないので、2か3を使うとよいと思います。2は削除対象が特定できるときは確実ですが、手間がかかるのと、またすべての削除対象をカバーできるかが不安です。3は特定のマッチングにしか使えませんが、ずばりパターンを指定できれば最も簡潔かつ完全に意図通りの文字列置換ができます。

28
18
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
28
18