将字符串转义为有效的python表达式

时间:2013-04-22 09:28:10

标签: python python-3.2

我的问题很简单。让我们假设你在python中有这样的字符串Foo '" \ Bar

正确的方式将它转换为有效的python表达式是什么样的'Foo \'" \\ Bar'(所以你只需将它复制并粘贴到python解释器即可会工作吗?

我想到了'"{}"'.format(some replace magic),但必须有更好的解决方案。

2 个答案:

答案 0 :(得分:3)

您可以使用unicode_escape codec;这会产生一个bytes实例:

>>> example = 'Foo \'" \\ Bar'
>>> print(example)
Foo '" \ Bar
>>> print(example.encode('unicode_escape'))
b'Foo \'" \\\\ Bar'
>>> example.encode('unicode_escape')
b'Foo \'" \\\\ Bar'

unicode_escape expliticly 生成有效的python字符串文字:

  

在Python源代码中生成一个适合作为Unicode文字的字符串

要返回Unicode,只需从ASCII解码:

>>> print(example.encode('unicode_escape').decode('ascii'))
Foo '" \\ Bar
>>> example.encode('unicode_escape').decode('ascii')
'Foo \'" \\\\ Bar'

或者,使用repr()

>>> repr(example)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(example))
'Foo \'" \\ Bar'
  

返回包含对象的可打印表示的字符串。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时会产生具有相同值的对象,否则表示形式是包含在尖括号中的字符串,其中包含类型的名称。对象以及通常包括对象的名称和地址的附加信息。

字符串的repr()输出可以直接粘贴回Python解释器,无需额外的格式化。

请注意,repr()unicode_escape仅在绝对必要时转义引号。只有当两种引用样式(单引号和双引号)都存在时才会转义其中一种:

>>> print(repr('\''))
"'"
>>> print(repr('\"'))
'"'
>>> print(repr('\'"'))
'\'"'

答案 1 :(得分:1)

这正是repr的意图:

>>> x = '''Foo '" \ Bar'''
>>> repr(x)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(x))
'Foo \'" \\ Bar'