如何在python中用单个反斜杠替换双反斜杠?

时间:2011-07-19 18:51:31

标签: python escaping backslash

我有一个字符串。在那个字符串是双反斜杠。我想用单个反斜杠替换双反斜杠,以便可以正确解析unicode char代码。

(Pdb) p fetched_page
'<p style="text-align:center;" align="center"><strong><span style="font-family:\'Times New Roman\', serif;font-size:115%;">Chapter 0<\\/span><\\/strong><\\/p>\n<p><span style="font-family:\'Times New Roman\', serif;font-size:115%;">Chapter 0 in \\u201cDreaming in Code\\u201d give a brief description of programming in its early years and how and why programmers are still struggling today...'

在此字符串的内部,您可以看到转义的unicode字符代码,例如:

\\u201c

我想把它变成:

\u201c

尝试1:

fetched_page.replace('\\\\', '\\')

但这不起作用 - 它会搜索四个反斜杠。

尝试2:

fetched_page.replace('\\', '\')

但是这会导致行尾错误。

尝试3:

fetched_page.decode('string_escape')

但这对文本没有影响。所有双反斜杠都保留为双反斜杠。

7 个答案:

答案 0 :(得分:22)

您可以尝试codecs.escape_decode,这应该解码转义序列。

答案 1 :(得分:11)

我没有得到你描述的行为:

>>> x = "\\\\\\\\"
>>> print x
\\\\
>>> y = x.replace('\\\\', '\\')
>>> print y
\\

当你在输出中看到'\\\\'时,你看到的字符串数量是字符串中的两倍,因为每个字符都是转义的。你写的代码应该可以正常工作。尝试print输出实际值,而不是仅查看REPL如何显示它们。

答案 2 :(得分:5)

为了扩展Jeremy的答案,你的问题是'\'是一个非法的字符串,因为\'会转义引号,所以你的字符串永远不会终止。

答案 3 :(得分:2)

可能有点矫枉过正,但是......

>>> import re
>>> a = '\\u201c\\u3012'
>>> re.sub(r'\\u[0-9a-fA-F]{4}', lambda x:eval('"' + x.group() + '"'), a)
'“〒'

所以是的,最简单的解决方案是ms4py的答案,在字符串上调用codecs.escape_decode并获取结果(如果escape_decode返回结果的第一个元素,则返回Python 3中的元组)。在Python 3中,您在使用字符串(而不是字节对象)时需要使用codecs.unicode_escape_decode

答案 4 :(得分:0)

Python3:

>>> b'\\u201c'.decode('unicode_escape')
'“'

>>> '\\u201c'.encode().decode('unicode_escape')
'“'

答案 5 :(得分:0)

有趣的问题,但实际上,您只有一个斜杠符号。这只是它在python中的表示方式。如果列出符号列表,则哪个字符串包含?喜欢:

[s for s in string_object]

它显示每个符号,并将“”表示为“ \”,但您不必对此感到困惑。它实际上是单个符号。因此,在我的示例中,它不是双反斜杠。

真实示例:

>>> [s for s in 'usnDu\\NgAnA{I']
['u', 's', 'n', 'D', 'u', '\\', 'N', 'g', 'A', 'n', 'A', '{', 'I']

答案 6 :(得分:-3)

只需打印出来:

>>> a = '\\u201c'
>>> print a
\u201c
相关问题