为了账号安全,请及时绑定邮箱和手机立即绑定

从python中的字符串中剥离不可打印的字符

从python中的字符串中剥离不可打印的字符

陪伴而非守候 2019-08-26 15:15:02
从python中的字符串中剥离不可打印的字符我用来跑$s =~ s/[^[:print:]]//g;在Perl上摆脱不可打印的字符。在Python中没有POSIX正则表达式类,我不能写[:print:]让它意味着我想要的东西。我知道在Python中无法检测字符是否可打印。你会怎么做?编辑:它也必须支持Unicode字符。string.printable方式很乐意将它们从输出中剥离出来。对于任何unicode字符,curses.ascii.isprint都将返回false。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

遗憾的是,迭代字符串在Python中相当慢。对于这种事情,正则表达式要快一个数量级。你只需要自己构建角色类。该unicodedata模块是这个相当有帮助,尤其是unicodedata.category()函数。有关类别的说明,请参阅Unicode字符数据库

import unicodedata, re

all_chars = (unichr(i) for i in xrange(0x110000))control_chars = ''.join(c for c in all_chars if unicodedata.category(c) == 'Cc')# or equivalently and much more efficientlycontrol_chars = ''.join(map(unichr, range(0,32) + range(127,160)))control_char_re = re.compile('[%s]' % re.escape(control_chars))def remove_control_chars(s):
    return control_char_re.sub('', s)


查看完整回答
反对 回复 2019-08-26
?
桃花长相依

TA贡献1860条经验 获得超8个赞

您可以尝试使用以下unicodedata.category()功能设置过滤器:

import unicodedata
printable = {'Lu', 'Ll'}def filter_non_printable(str):
  return ''.join(c for c in str if unicodedata.category(c) in printable)

有关可用类别的Unicode数据库字符属性,请参见第175页的表4-9


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 847 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信