首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中从字符串中剥离不可打印的字符

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

Stack Overflow用户
提问于 2008-09-18 21:17:07
回答 12查看 146.8K关注 0票数 96

我过去常常跑步

代码语言:javascript
复制
$s =~ s/[^[:print:]]//g;

在Perl上删除不可打印的字符。

在Python中没有POSIX正则表达式类,我不能写:print:让它意味着我想要的东西。我不知道在Python中有没有办法检测字符是否可打印。

你怎么做?

编辑:它还必须支持Unicode字符。string.printable方法将很高兴地将它们从输出中剥离出来。对于任何unicode字符,curses.ascii.isprint都将返回false。

EN

回答 12

Stack Overflow用户

发布于 2008-09-18 13:23:15

据我所知,最有效的方法是:

代码语言:javascript
复制
import string

filtered_string = filter(lambda x: x in string.printable, myStr)
票数 79
EN

Stack Overflow用户

发布于 2008-09-18 15:25:38

您可以尝试使用unicodedata.category()函数设置过滤器:

代码语言:javascript
复制
import unicodedata
printable = {'Lu', 'Ll'}
def filter_non_printable(str):
  return ''.join(c for c in str if unicodedata.category(c) in printable)

有关可用类别的信息,请参见第175页的Unicode database character properties中的表4-9

票数 20
EN

Stack Overflow用户

发布于 2014-09-14 10:20:40

在Python 3中,

代码语言:javascript
复制
def filter_nonprintable(text):
    import itertools
    # Use characters of control category
    nonprintable = itertools.chain(range(0x00,0x20),range(0x7f,0xa0))
    # Use translate to remove all non-printable characters
    return text.translate({character:None for character in nonprintable})

有关.translate()与正则表达式& .replace()的比较,请参阅this StackOverflow post on removing punctuation

这些范围可以使用@Ants Aasma所示的Unicode character database categories通过nonprintable = (ord(c) for c in (chr(i) for i in range(sys.maxunicode)) if unicodedata.category(c)=='Cc')生成。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/92438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档