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

问题描述 投票:21回答:6

我有一个字符串。在那个字符串是双反斜杠。我想用单个反斜杠替换双反斜杠,以便可以正确解析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')

但这对文本没有影响。所有双反斜杠仍然是双反斜杠。

python escaping backslash
6个回答
23
投票

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


11
投票

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

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

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


5
投票

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


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(而不是字节对象)。


0
投票

Python3:

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

要么

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

-3
投票

只需打印它:

>>> a = '\\u201c'
>>> print a
\u201c
© www.soinside.com 2019 - 2024. All rights reserved.