我的问题很简单。让我们假设你在 python 中有这样的字符串Foo '" \ Bar
。
将它转换为有效的python表达式的正确方法是什么(所以你只需将它复制并粘贴到python解释器就可以了)?'Foo \'" \\ Bar'
我想过'"{}"'.format(some replace magic)
,但必须有更好的解决方案。
我的问题很简单。让我们假设你在 python 中有这样的字符串Foo '" \ Bar
。
将它转换为有效的python表达式的正确方法是什么(所以你只需将它复制并粘贴到python解释器就可以了)?'Foo \'" \\ Bar'
我想过'"{}"'.format(some replace magic)
,但必须有更好的解决方案。
您可以使用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('\'"'))
'\'"'
这正是要做repr
的事情:
>>> x = '''Foo '" \ Bar'''
>>> repr(x)
'\'Foo \\\'" \\\\ Bar\''
>>> print(repr(x))
'Foo \'" \\ Bar'