Removendo caracteres não imprimíveis de uma string em Python
Em contraste com Perl, Python não possui classes regex POSIX, tornando-o difícil de detectar e remova caracteres não imprimíveis usando expressões regulares.
Então, como você pode conseguir isso em Python?
Uma abordagem é aproveitar o módulo unicodedata. A função unicodedata.category classifica os caracteres Unicode em várias categorias. Por exemplo, caracteres categorizados como Cc (controle) representam caracteres não imprimíveis.
Usando esse conhecimento, você pode construir uma classe de caracteres personalizada que corresponda a todos os caracteres de controle:
import unicodedata
import re
import 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)
control_char_re = re.compile('[%s]' % re.escape(control_chars))
def remove_control_chars(s):
return control_char_re.sub('', s)
Esta função remove efetivamente todos os caracteres ASCII não imprimíveis da string de entrada.
Como alternativa, você pode usar o método string.printable integrado do Python para filtrar caracteres não imprimíveis. No entanto, esse método exclui caracteres Unicode, portanto, pode não ser adequado para todos os casos de uso.
Para lidar com caracteres Unicode, você pode expandir a classe de caracteres na expressão regular da seguinte maneira:
control_chars = ''.join(map(chr, itertools.chain(range(0x00,0x20), range(0x7f,0xa0))))
Esta classe de caracteres estendida abrange os caracteres de controle básicos junto com caracteres não comuns -caracteres Unicode imprimíveis.
Ao modificar a função remove_control_chars adequadamente, você pode lidar com êxito com caracteres não imprimíveis ASCII e Unicode.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3