L'itération sur des chaînes est malheureusement assez lente en Python. Les expressions régulières sont plus rapides d'un ordre de grandeur pour ce genre de chose. Il vous suffit de créer vous-même la classe de personnage. Le module unicodedata est très utile pour cela, en particulier la fonction unicodedata.category () . Voir Base de données de caractères Unicode pour une description des catégories.
import unicodedata, re, itertools, sys
all_chars = (chr(i) for i in range(sys.maxunicode))
categories = {'Cc'}
control_chars = ''.join(c for c in all_chars if unicodedata.category(c) in categories)
# or equivalently and much more efficiently
control_chars = ''.join(map(chr, itertools.chain(range(0x00,0x20), range(0x7f,0xa0))))
control_char_re = re.compile('[%s]' % re.escape(control_chars))
def remove_control_chars(s):
return control_char_re.sub('', s)
Pour Python2
import unicodedata, re, sys
all_chars = (unichr(i) for i in xrange(sys.maxunicode))
categories = {'Cc'}
control_chars = ''.join(c for c in all_chars if unicodedata.category(c) in categories)
# or equivalently and much more efficiently
control_chars = ''.join(map(unichr, range(0x00,0x20) + range(0x7f,0xa0)))
control_char_re = re.compile('[%s]' % re.escape(control_chars))
def remove_control_chars(s):
return control_char_re.sub('', s)
Pour certains cas d'utilisation, des catégories supplémentaires (par exemple, toutes du groupe témoin peuvent être préférables, bien que cela puisse ralentir le temps de traitement et augmenter considérablement l'utilisation de la mémoire. Nombre de caractères par catégorie:
Cc
(contrôle): 65
Cf
(format): 161
Cs
(substitut): 2048
Co
(à usage privé): 137468
Cn
(non attribué): 836601
Modifier Ajout de suggestions à partir des commentaires.