2012-08-31 54 views
1

右我已經下面的代碼拆呢?我只希望他們在我的列表中有一次,因爲我想在正則表達式中使用此列表。逃生繩和後

在此先感謝!約翰

回答

1

是每個只有一個反斜槓,但打印字符串的repr時,他們被複制(逃脫) - 就像你使用一個字符串來構建一個正則表達式時需要複製它們。所以一切都很好。

例如:

>>> len("\\") 
1 
>>> len("\\n") 
2 
>>> len("\n") 
1 
>>> print "\\n" 
\n 
>>> print "\n" 


>>> 
+0

Aww我明白了,謝謝!另一個小問題:有沒有辦法告訴're.escape'不要逃離空格? –

+0

@JohnSmith:不,''re.escape()'[只是在每個非字母數字字符前打一個反斜槓](http://docs.python.org/library/re.html#re.escape)。這有點矯枉過正,但不應該傷害。實際上,如果在編譯正則表達式時使用're.VERBOSE',則需要轉義空格。 –

+0

在你的情況下,它確實受到了傷害,但是你可以很容易地解決這個問題:首先拆分,然後轉義:'key = [key.split()]中item的[re.escape(item)]'。 –

0

反斜槓不重複。爲了實現這一目標,努力做到:

for element in key: 
    print element 

你會看到這樣的輸出:

\#one\ 
\#two\ 
\#some\ 
\#tests\ 
\#are\ 
\#done 

當您打印整個列表,蟒蛇用表示,其中字符串不打印爲他們,但它們被打印爲python表達式(注意引號「」,它們不在字符串中)

要實際編碼包含反斜槓的字符串,您需要複製該反斜槓。這就對了。

1

\字符是一個轉義字符,即改變後續字符[s]的含義的字符。例如,「n」字符只是一個「n」。但是如果你像「\ n」那樣轉義它就會成爲「換行符」。因此,如果您需要使用\ literal,則需要使用...自身:\\

0

當您將列表轉換爲字符串(例如打印它)時,它會調用repr包含的每個對象在列表中。這就是爲什麼你會在你的第二行輸出中得到引號和額外的反斜槓。試試這個:

s = "\\a string with an escaped backslash" 
print s  # prints: \a string with an escaped backslash 
print repr(s) # prints: '\\a string with an escaped backslash' 

repr調用把引號括起來的周圍,並展示了反斜槓。