2

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

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

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

4

2 回答 2

3

您可以使用unicode_escape编解码器;这会产生一个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 显式生成有效的 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('\'"'))
'\'"'
于 2013-04-22T09:30:12.517 回答
1

这正是要做repr的事情:

>>> x = '''Foo '" \ Bar'''
>>> repr(x)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(x))
'Foo \'" \\ Bar'
于 2013-04-22T09:41:57.527 回答