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

zzz*_*zzz 23 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...'
Run Code Online (Sandbox Code Playgroud)

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

\\u201c
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

\u201c
Run Code Online (Sandbox Code Playgroud)

尝试1:

fetched_page.replace('\\\\', '\\')
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - 它搜索四倍反斜杠.

尝试2:

fetched_page.replace('\\', '\')
Run Code Online (Sandbox Code Playgroud)

但这会导致行尾错误.

尝试3:

fetched_page.decode('string_escape')
Run Code Online (Sandbox Code Playgroud)

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

sch*_*mar 24

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

  • 另一种选择可能是`'mystring'.decode('unicode_escape')` (9认同)
  • @ms_py:但在Python 3中不起作用; 它需要是'b'mybytes'.decode('unicode_escape')`.但是,`codecs.unicode_escape_decode`工作得很好. (3认同)
  • 你如何使用这个? (3认同)

max*_*555 14

蟒蛇3:

>>> b'\\u201c'.decode('unicode_escape')
'“'
Run Code Online (Sandbox Code Playgroud)

或者

>>> '\\u201c'.encode().decode('unicode_escape')
'“'
Run Code Online (Sandbox Code Playgroud)


小智 12

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

>>> x = "\\\\\\\\"
>>> print x
\\\\
>>> y = x.replace('\\\\', '\\')
>>> print y
\\
Run Code Online (Sandbox Code Playgroud)

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

  • 但是问题是“如何用一个反斜杠替换一个双反斜杠”,而不是如何用一个双反斜杠替换一个四重反斜杠! (3认同)

mur*_*d99 5

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