从 Python 中的字符串中剥离不可打印的字符
与 Perl 相比,Python 缺乏 POSIX 正则表达式类,因此很难检测并使用正则表达式删除不可打印的字符。
那么,如何在 Python 中实现此目的?
一种方法是利用 unicodedata 模块。 unicodedata.category 函数将 Unicode 字符分为各种类别。例如,分类为 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 方法过滤掉不可打印的字符。但是,此方法不包括 Unicode 字符,因此可能不适合所有用例。
要处理 Unicode 字符,您可以在正则表达式中扩展字符类,如下所示:
control_chars = ''.join(map(chr, itertools.chain(range(0x00,0x20), range(0x7f,0xa0))))
此扩展字符类包含基本控制字符以及常见的非字符-可打印的Unicode字符。
通过相应修改remove_control_chars函数,可以成功处理ASCII和Unicode不可打印字符。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3