【Python】文字列の削除

# stripを利用する
## stripで削除されるのは両端のみ

文字列の削除となると良くstripメソッドが紹介されます。 使い方は下記の通りです。

```python
s = 'aiueo'
s = s.strip('a')
print(s) # iueo

s = '  \t   hoge\r\n     \t '
s = s.strip() # 引数を省略すると空白・改行・タブが削除
print(s) # hoge

しかし、strip関数で文字列が削除されるのは両端のみです。 この点に触れている記事が少なく、勘違いして使っていたこともありました。 なので、この点には注意して利用しましょう。

s = 'aiueo'
s = s.strip('u') #両端じゃないところは削除されない
print(s) # aiueo

s = '  \t   Hello World!\r\n     \t '
s = s.strip()
print(s) # Hello World!

片側だけ削除したい場合はrstrip,lstrip

s = 'aiueo'
print(s.lstrip('a')) # iueo
print(s.rstrip('o')) # aiue
print(s.rstrip('a')) # rstripで左側は削除できない
print(s.lstrip('o')) # lstripで右側は削除できない

replaceを利用する方法

stripは両端の文字しか削除はしてくれません。 なので、文字列全体から特定の文字列を削除したい場合は、 replaceで削除したい文字列を”に置き換えるのが一般的です。

s = 'hoge hoge hoge'
s = s.replace(' ','')
print(s) # hogehogehoge

translateを利用する

いくつかの値をまとめて削除するとき replaceを複数書くことで削除できますが冗長です。 そこで、translateを利用することで 複数種類の文字列を削除するスマートな書き方ができます。 次のコードでは、空白・タブ・改行コードを削除します。

transtable = str.maketrans({
    ' ':'',
    '\t':'',
    '\n':'',
    '\r':''})
s = 'ho  ge \t hog    e \n hoge\r\nhoge   '
s = s.translate(transtable)
print(s) # hogehogehogehoge

正規表現を利用する

正規表現で削除?

「数字が4つ並ぶところ」や「アルファベットが連続するところ」など ある特定のパターンの部分を削除したいことがあります。 そんなときは、 正規表現という方法を用いてそのパターンを定義します。 その正規表現をもとに削除することができます。

正規表現で空白・タブ・改行コードを削除

空白・タブ・改行コードを削除するコードを正規表現を利用して書いてみます。

import re
pattern = '(\ |\t|\n|\r)*'
s = 'ho  ge \t hog    e \n hoge\r\nhoge   '
s = re.sub(pattern, '',s)
print(s) # hogehogehogehoge

“`

コメント

タイトルとURLをコピーしました