51

在python中给定一个字符串,例如:

s = 'This sentence has some "quotes" in it\n'

我想创建该字符串的新副本,其中任何引号都已转义(以便在 Javascript 中进一步使用)。所以,例如,我想要的是产生这个:

'This sentence has some \"quotes\" in it\n'

我尝试使用replace(),例如:

s.replace('"', '\"')

但这会返回相同的字符串。所以我尝试了这个:

s.replace('"', '\\"')

但这会返回双转义引号,例如:

'This sentence has some \\"quotes\\" in it.\n'

如何"替换\"

更新:

我需要作为此可复制文本的输出,将引号和换行符都显示为转义。换句话说,我希望能够复制:

'This sentence has some \"quotes\" in it.\n'

如果我使用原始字符串和print结果,我会得到正确转义的引号,但不会打印转义的换行符。如果我不使用print,那么我会得到我的换行符但双引号。如何创建一个我可以复制的字符串,该字符串显示换行符和引号已转义?

4

3 回答 3

62

Hi usually when working with Javascript I use the json module provided by Python. It will escape the string as well as a bunch of other things as user2357112 has pointed out.

import json
string = 'This sentence has some "quotes" in it\n'
json.dumps(string) #gives you '"This sentence has some \\"quotes\\" in it\\n"'
于 2013-09-19T05:33:23.263 回答
26

您的第二次尝试是正确的,但是您对字符串的 therepr和 the之间的区别感到困惑。str第二种方式的更惯用方法是使用“原始字符串”:

>>> s = 'This sentence has some "quotes" in it\n'
>>> print s
This sentence has some "quotes" in it

>>> print s.replace('"', r'\"')  # raw string used here
This sentence has some \"quotes\" in it

>>> s.replace('"', r'\"')
'This sentence has some \\"quotes\\" in it\n'

原始字符串是所见即所得的:原始字符串中的反斜杠只是另一个字符。它是 - 正如你所发现的 - 否则很容易混淆;-)

打印字符串(上面的倒数第二个输出)表明它包含您现在想要的字符。

如果没有print(上面的最后一个输出),Pythonrepr()会在显示之前隐式应用于该值。结果是一个字符串,如果 Python 对其进行评估,它将产生原始字符串。这就是为什么在最后一行中反冲加倍的原因。它们不在字符串中,但它们是必需的,这样如果 Python 对它求值,每一个都\\将成为\结果中的一个。

于 2013-09-19T05:20:36.870 回答
7

您的最后一次尝试按预期工作。您看到的双反斜杠只是显示字符串中实际存在的单个反斜杠的一种方式。您可以通过检查结果的长度来验证这一点len()

有关双反斜杠的详细信息,请参阅:__repr__()


更新:

在回答您编辑的问题时,其中一个怎么样?

print repr(s).replace('"', '\\"')
print s.encode('string-escape').replace('"', '\\"')

或者对于 python 3:

print(s.encode('unicode-escape').replace(b'"', b'\\"'))
于 2013-09-19T05:14:25.140 回答