LoginSignup
3
3

More than 3 years have passed since last update.

Python 半角の記号を削除したい

Last updated at Posted at 2019-12-04

やりたいこと

  • 文字列の中に含まれる以下の記号を削除したい
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

確認環境

  • python3.6
  • CentOS7

方法

>>> import string
>>> text = 'Abcd1!EfgH"#$%2s&\'I()j*5k+,-./:l;MMM<=>NNN?@[\Z]^_`{99|00}7~8'
>>> result = text.translate(str.maketrans( '', '',string.punctuation))
>>> print(result)
Abcd1EfgH2sIj5klMMMNNNZ990078

解説

  • 分解して記載してみる
>>> import string
>>> text = 'Abcd1!EfgH"#$%2s&\'I()j*5k+,-./:l;MMM<=>NNN?@[\Z]^_`{99|00}7~8'
>>> kigo = string.punctuation
>>> print(kigo)
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
>>> table = str.maketrans( '', '',kigo)
>>> result = text.translate(table)
>>> print(result)
Abcd1EfgH2sIj5klMMMNNNZ990078
  • 1~4行目
  • 記号を含む文字列定数 string.punctuation を利用する
>>> import string
>>> kigo = string.punctuation
>>> print(kigo)
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
  • 6行目
  • 文字変換の為の translate() 用変換テーブルを作成
>>> table = str.maketrans( '', '',kigo)
# 第3引数に指定した文字を削除する
  • 7行目
  • 変換テーブルを使い、対象テキストを変換(対象文字を削除)
>>> result = text.translate(table)
  • 8行目
  • 結果の確認
>>> print(result)
Abcd1EfgH2sIj5klMMMNNNZ990078

使用例

  • 日時ISOフォーマットから数値のみ抽出
>>> from datetime import datetime
>>> d = datetime.now().isoformat()
>>>
>>> print(d)
2019-12-03T19:03:16.015300
>>> 
>>> dnum = d.translate(str.maketrans( '', '',string.punctuation + 'T'))
>>> print(dnum)
20191203190316015300
  • 消したい記号を絞るなど
>>> table = str.maketrans( '', '', '()<>[]{}')

その他、参考情報

  • 文字列定数は以下のようにstring.punctuation以外にも多数ある

  • 小文字

>>> print(string.ascii_lowercase)
abcdefghijklmnopqrstuvwxyz
  • 大文字
>>> print(string.ascii_uppercase)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • 数値
>>> print(string.digits)
0123456789
  • 印刷可能文字 ※空白も含まれるので注意
>>> print(string.printable)
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~



>>>
  • 空白
print(string.whitespace)

以上

3
3
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
3
3