解释像print这样的转义字符串

时间:2012-12-10 02:21:24

标签: python string

假设我在Python中有以下字符串:

>>> example="""
... \nthird line
... [\t] <-tab in there
... [\n] <-\\n in there
... \v vtab
... 1\b2 should be only '2'
... this\rthat <- should be only 'that'
... """

如果我打印出来的话,各种转义字符(如标签的\t)会插入到人类可读的格式中:

>>> print example


third line
[   ] <-tab in there
[
] <-\n in there

 vtab
2 should be only '2'
that <- should be only 'that'

如果我只想生成一个扩展或解释的各种转义码而不打印它的字符串怎么办?像这样的东西:

>>> exp_example = example.expandomethod()

(我已经查看了各种字符串方法,解码和格式,但没有一个像本例中那样工作。)


修改

好的 - 感谢我对厚厚的双桨的帮助。我确信这些字符串正在被解析,它们就是这样,但它们的显示却让我感到愚蠢。

我在自己的脑海中解决了这个问题:

>>> cr='\012'   # CR or \n in octal
>>> len(cr)
1
>>> '123'+cr
'123\n'
>>> '123\012' == '123\n'
True

4 个答案:

答案 0 :(得分:1)

它们不是插值的。它们是印刷的。例如,\t通常会打印多个空格; this\rthat将打印this,然后返回并在其上打印that。如果你要在打印机上打印它,你会看到这两个词。

如果你想将字符串缩减为打印等效的字符串,我想你必须编写自己的终端模拟器 - 我不知道有任何库可以为你做。

更好的问题是 - 你为什么需要它?它看起来非常像XY问题。

答案 1 :(得分:1)

有些字符的表示形式与打印时的外观不同。 (换行符'\n'只是最明显的一个。)您无法真正存储这些字符在打印时的外观。这就像询问如何存储特定字体使角色看起来的方式。

>>> example="""a
... b"""
>>> print example # This is what a newline looks like. You cannot capture it.
a
b
>>> example # This is how a newline is represented.
'a\nb'

答案 2 :(得分:1)

打印不解释任何内容。它已经是字符串本身具有不同的内部和外部表示。

证明:

s = "\t"
len(s)

...收益1而不是2

答案 3 :(得分:0)

正如其他人所说,当您输入转义字符串时,或者Python首先解释字符串时,转义字符\和后面的字符将缩减为单个目标字符。

但是 - 如果你要构建一个字符串,其目的是从转义序列中生成不可打印的字符,str.decode([encoding[, errors]])可以做你想要的:

>>> s='string'
>>> esc='\\'
>>> n='n'
>>> st=s+esc+n+'next line'
>>> print st
string\nnextline
>>> print st.decode('string_escape')
string
next line

而且:

>>> ''.join(['\\','n','\\','t'])=='\n\t'
False

是与此不同的结果:

>>> ''.join(['\\','n','\\','t']).decode('string_escape')=='\n\t'
True