如何打印这些字符?

时间:2014-05-21 10:38:57

标签: python

我有一个字符串:

"\\xB9 blah\n   blah: \xbf\xaa\xb7\xa2\xb2\xbf\n" 

我希望将其打印为:

\\xB9 blah
   blah: \\xbf\\xaa\\xb7\\xa2\\xb2\\xbf

我试过了:

s = "\\xB9 blah\n   blah: \xbf\xaa\xb7\xa2\xb2\xbf\n"
s = s.replace(r'\x',r'\\x')                                                     
print s

但是这会在blah之后在第二行打印出看起来很滑稽的角色:我如何让它工作?

2 个答案:

答案 0 :(得分:2)

字符串中的\xNN表示法转换为代码为NN的字符。为了使您的replace方法能够执行您想要的操作,您需要为其提供一个字符串,以便找到子串\x。您可以使用原始字符串,或者只是转义反斜杠:

s = r"\\xB9 blah\n   blah: \xbf\xaa\xb7\xa2\xb2\xbf\n"
s = s.replace(r'\x',r'\\x')

s = "\\xB9 blah\n   blah: \\xbf\\xaa\\xb7\\xa2\\xb2\\xbf\n"
s = s.replace(r'\x',r'\\x')

如果你想打印转移字符的转义版本,那就有点棘手了。假设您只想转义扩展的ASCII字符,我会这样做:

def escape_non_ascii(s):
    out = ''
    for c in s:
        if 31 < ord(c) < 127:
            out += c
        elif c == '\n':
            out += r'\n'
        else:
            out += r'\x{0:x}'.format(ord(c))
    return out

print escape_non_ascii("\\xB9 blah\n   blah: \xbf\xaa\xb7\xa2\xb2\xbf\n")

答案 1 :(得分:0)

试试这个:

s = r"\\xB9 blah\n   blah: \xbf\xaa\xb7\xa2\xb2\xbf\n"
for part in s.split('\\n'):
    print part