从 Python 中的字符串中删除不可打印的字符
问题:
在 Perl 中,可以使用正则表达式 s/[^[:print:]]//g 删除不可打印的字符。但是,在 Python 中,不支持 [:print:] 类。我们如何在Python中实现类似的同时处理ASCII和Unicode字符的功能?
答案:
由于Python在检测可打印性方面的限制,我们可以构造自己的字符使用 unicodedata 模块的类。
<code class="python">import unicodedata, re, itertools, sys # Generate a list of all characters all_chars = (chr(i) for i in range(sys.maxunicode)) # Category of control characters categories = {'Cc'} control_chars = ''.join(c for c in all_chars if unicodedata.category(c) in categories) # Escape the control characters for regular expression matching control_char_re = re.compile('[%s]' % re.escape(control_chars)) # Function to remove control characters from a string def remove_control_chars(s): return control_char_re.sub('', s)</code>
对于 Python 2:
<code class="python">import unicodedata, re, sys # Generate a list of all characters all_chars = (unichr(i) for i in xrange(sys.maxunicode)) # Category of control characters categories = {'Cc'} control_chars = ''.join(c for c in all_chars if unicodedata.category(c) in categories) # Escape the control characters for regular expression matching control_char_re = re.compile('[%s]' % re.escape(control_chars)) # Function to remove control characters from a string def remove_control_chars(s): return control_char_re.sub('', s)</code>
扩展选项:
对于更全面的删除,可以包含其他类别,尽管这可能会影响性能。
字符类别和计数:
以上是如何从 Python 字符串中删除不可打印的字符?的详细内容。更多信息请关注PHP中文网其他相关文章!