【问题标题】:python : encode using string-escape to get the correct quotespython:使用字符串转义编码以获得正确的引号
【发布时间】:2016-03-23 10:40:40
【问题描述】:

我想编码我的字符串:

x="print 'Hello.\nI\'m a robot from district 09'"
x=x.encode('string-escape')
print x

# Result: print \'Hello.\nI\'m a robot from district 09\'

但这不是我期待的结果。我想要类似的东西:

# Result: print 'Hello.\nI\'m a robot from district 09'

如何得到这个结果?所以当我使用'exec x'执行它时,我会得到这个:

exec x
# Result: 
Hello.
I'm a robot from district 09

【问题讨论】:

    标签: python escaping encode


    【解决方案1】:

    使用repr

    x="print 'Hello.\nI\'m a robot from district 09'"
    print repr(x)
    
    # Result: 'Hello.\nI\'m a robot from district 09'
    

    编辑:正如评论中提到的,这种方法错过了 I'm 中的 ' 使用'r'可以简单地实现打印原始字符串。请参见下面的示例。这次我自己确认了结果。

    x= r"print 'Hello, \nI\'m a robot from district 09'"
    print x
    
    #result: print 'Hello, \nI\'m a robot from district 09'
    

    Edit2 :您不能将现有字符串变为“原始”。解析器可以理解文字上的 r 前缀;它告诉它忽略字符串中的转义序列。但是,一旦解析了字符串文字,原始字符串和“常规”字符串之间就没有区别了。例如,如果您有一个包含换行符的字符串,则无法在运行时判断该换行符是来自转义序列 \n 还是来自诸如“\next”之类的字符串。从任何这些方法构造的实际字符串对象看起来都一样。

    因此,任何使用 string-encode/string-escape 和 repr 的尝试都会因您所期望的用途而失败。

    希望这会有所帮助。

    【讨论】:

    • 谢谢,但结果仍然错误:“print 'Hello.\nI'm a robot from District 09'”。 -i'm- 中的“\'”不见了。
    • @andio 请查看编辑。感谢您指出错误!
    • 嗨,是的,我也试过了。只有当我可以自己设置 x 时,'r' 才有效。但是如果 x 是其他用户输入的变量(使用文本输入界面)。怎么能把那个'r'嵌入到那个变量中呢?所以目标是:用户在文本输入中输入命令。然后我提供按钮,我可以使用“exec”命令来运行它。
    • 实际上 r'mystring' 是完美的解决方案。但是如果有人给我字符串变量 VAR,我怎么能把它嵌入到类似:rVAR.看来我没办法了
    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2020-02-20
    • 2019-11-25
    相关资源
    最近更新 更多