簡體   English   中英

如何在python中用單個反斜杠替換雙反斜杠?

[英]How to replace a double backslash with a single backslash in python?

我有一個字符串。 在那個字符串中是雙反斜杠。 我想用單反斜杠替換雙反斜杠,以便可以正確解析 unicode 字符代碼。

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

但這對文本沒有影響。 所有雙反斜杠都保留為雙反斜杠。

您可以嘗試codecs.escape_decode ,這應該解碼轉義序列。

蟒蛇3:

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

或者

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

我沒有得到你描述的行為:

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

當您在輸出中看到'\\\\\\\\'時,您看到的斜杠數量是字符串中斜杠數量的兩倍,因為每個斜杠都被轉義了。 您編寫的代碼應該可以正常工作。 嘗試print出實際值,而不是只查看 REPL 如何顯示它們。

為了擴展 Jeremy 的回答,您的問題是'\\'是非法字符串,因為\\'轉義引號,因此您的字符串永遠不會終止。

這可能有點矯枉過正,但是......

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

有趣的問題,但實際上,您只有一個斜杠符號。 這只是它在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']

只需打印它:

>>> a = '\\u201c'
>>> print a
\u201c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM