2011-03-10 142 views
2

我試圖將一些文本提供給特殊的pupose解析器。這個解析器的問題在於它對()[]字符很敏感,在我的文章中有很多這樣的字符。解析器手冊提示所有()[]都被替換爲\(\) \[ \]。所以使用str.replace我正在使用附加\所有這些charcaters。我用下面的代碼:替換字符串中的特殊字符的問題

a = 'abcdef(1234)' 
a.replace('(','\(') 

但是我得到這個作爲我的輸出:

'abcdef\\(1234)' 

什麼是錯我的代碼?任何人都可以提供給我一個解決方案來解決這些字符?

+0

看看:http://docs.python.org/library/re.html#re.escape也許它已經是你想要的了。 – mouad 2011-03-10 16:19:43

回答

3

這就是在REPL中打印轉義字符(如反斜槓)的方式。字符串的實際值與您的預期相同。

>>> a = '\(' 
>>> a 
'\\(' 
>>> print(a) 
\(
1
suggests that all the()[] get replaced with \(\) \[ \] 

按照我的理解,解析器本身進行更換,因此,如果您輸入:

'abcdef(1234)' 

輸出將是:

'abcdef\(1234\)' 

所以,你必須解析輸出,讓您的原文爲:

output.replace('\(','(').replace('\)',')')...... 

et c ...

4

你的代碼沒有問題。這是Python的方式告訴你,該字符串包含一個文字\,通過向您顯示反斜槓已被轉義爲\\

這樣你就可以知道你是否有兩個字符,一個是\,其次是(,或者只是一個字符,轉義括號\(

當您做print 'abcdef\\(1234)'時,您可能預計會看到您看到的內容。你想要的就是你已經擁有的東西。