1. ホーム
  2. パイソン

[解決済み】Pythonで文字列から英数字以外を削除する方法

2022-03-24 01:42:39

質問

Pythonを使って、文字列から英数字以外の文字をすべて取り除く最良の方法は何ですか?

で紹介した解決策は この質問の PHP 変形版 は少し調整すれば動くと思いますが、私にはあまり「パイソン的」であるとは思えません。

ちなみに、ピリオドとカンマ(およびその他の句読点)だけでなく、引用符や括弧なども取り除きたいのです。

どのように解決するのですか?

興味本位でいくつかの関数の時間を計ってみました。 これらのテストでは、文字列から非英数字を削除しています。 string.printable (組み込みの string モジュール)を使用します。コンパイルされた '[\W_]+'pattern.sub('', str) が最速であることがわかった。

$ python -m timeit -s \
     "import string" \
     "''.join(ch for ch in string.printable if ch.isalnum())" 
10000 loops, best of 3: 57.6 usec per loop

$ python -m timeit -s \
    "import string" \
    "filter(str.isalnum, string.printable)"                 
10000 loops, best of 3: 37.9 usec per loop

$ python -m timeit -s \
    "import re, string" \
    "re.sub('[\W_]', '', string.printable)"
10000 loops, best of 3: 27.5 usec per loop

$ python -m timeit -s \
    "import re, string" \
    "re.sub('[\W_]+', '', string.printable)"                
100000 loops, best of 3: 15 usec per loop

$ python -m timeit -s \
    "import re, string; pattern = re.compile('[\W_]+')" \
    "pattern.sub('', string.printable)" 
100000 loops, best of 3: 11.2 usec per loop