用转义引号替换字符串中的所有引号?

时间:2013-09-19 05:09:57

标签: python string replace

给出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,那么我会得到我的新行,但双重转义引号。如何创建一个我可以复制的字符串,显示换行符和报价转义?

3 个答案:

答案 0 :(得分:31)

您通常在使用Javascript时使用Python提供的json模块。它会像user2357112指出的那样转义字符串以及其他一些东西。

import json
string = 'This sentence has some "quotes" in it\n'
json.dumps(string) #gives you '"This sentence has some \\"quotes\\" in it\\n"'

答案 1 :(得分:19)

您的第二次尝试是正确的,但您对字符串的reprstr之间的差异感到困惑。做第二种方式的更惯用的方法是使用“原始字符串”:

>>> 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'

原始字符串是WYSIWYG:原始字符串中的反斜杠只是另一个字符。它是 - 正如你所发现的那样 - 容易让人感到困惑; - )

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

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

答案 2 :(得分:5)

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

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


更新:

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

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

或者对于python 3:

print(s.encode('unicode-escape').replace(b'"', b'\\"'))