やりたいこと
- 文字列の中に含まれる以下の記号を削除したい
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
確認環境
- 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)
以上