Python:替换斜杠

时间:2016-08-26 00:46:06

标签: python string

我有一些带有百分号的unicode我想改成反斜杠。我知道你需要一个额外的反斜杠作为转义序列,但是当我这样做时replace()给了我两个反斜杠:

>>> s ="%20%u200F%u05D1%u05E8%u05DB%u05EA%u200F%20%u200F%u05D4%u05E8%u05D9%u05D7%u200F%20%u200F%u05D5%u05D1%u05E8%u05DB%u05EA%u200F%20%u200F%u05D4%u05D5%u05D3%u05D0%u05D4"
>>> s.replace("%","\")
File "<stdin>", line 1
s.replace("%","\")                  
SyntaxError: EOL while scanning string literal

>>> s.replace("%","\\")
'\\20\\u200F\\u05D1\\u05E8\\u05DB\\u05EA\\u200F\\20\\u200F\\u05D4\\u05E8\\u05D9\\u05D7\\u200F\\20\\u200F\\u05D5\\u05D1\\u05E8\\u05DB\\u05EA\\u200F\\20\\u200F\\u05D4\\u05D5\\u05D3\\u05D0\\u05D4'

'r'限定符也不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这只是python调用字符串__repr__,因为你在REPL中,\转义print字符,为你提供输出。

使用__str__,它将使用字符串print(s.replace("%","\\")) \20\u200F\u05D1\u05E8\u05DB\u05EA\u200F\20\u200F\u05D4\u05E8\u05D9\u05D7\u200F\20\u200F\u05D5\u05D1\u05E8\u05DB\u05EA\u200F\20\u200F\u05D4\u05D5\u05D3\u05D0\u05D4 ,将为您提供正确的输出:

$(".pages").droppable({
        accept: ".draggable"
});

也就是说,替换发生得很好。

答案 1 :(得分:0)

就像你必须键入两个反斜杠才能输入一个,Python在显示带引号的字符串时会显示两个以表明它是一个文字反斜杠。 '\\x41'是四个字符,'\x41'是一个字符(相当于'A')。这是一个调试功能,所以你可以看到不可打印的字符,例如,并告诉它不同。

>>> a = '\xa0\\xa0'
>>> a
'\xa0\\xa0'
>>> print(a)
 \xa0