Удаление непечатаемых символов из строки в Python
В отличие от Perl, в Python отсутствуют классы регулярных выражений POSIX, что затрудняет обнаружение и удалять непечатаемые символы с помощью регулярных выражений.
Итак, как этого можно добиться в Python?
Один из подходов — использовать модуль unicodedata. Функция unicodedata.category классифицирует символы Юникода по различным категориям. Например, символы, отнесенные к категории Cc (управляющие), представляют собой непечатаемые символы.
Используя эти знания, вы можете создать собственный класс символов, который соответствует всем управляющим символам:
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)
Эта функция эффективно удаляет все непечатаемые символы ASCII из входной строки.
В качестве альтернативы вы можете использовать встроенный в Python метод string.printable для фильтрации непечатаемых символов. Однако этот метод исключает символы Юникода, поэтому он может подходить не для всех случаев использования.
Чтобы обрабатывать символы Юникода, вы можете расширить класс символов в регулярном выражении следующим образом:
control_chars = ''.join(map(chr, itertools.chain(range(0x00,0x20), range(0x7f,0xa0))))
Этот расширенный класс символов включает в себя базовые управляющие символы, а также общие не -печатаемые символы Юникода.
Изменив функцию Remove_control_chars соответствующим образом, вы можете успешно обрабатывать непечатаемые символы как ASCII, так и Юникода.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3