轉自http://blog.sina.com.cn/s/blog_6a6c136d0102wzrj.html
注:以前會用path= r'C:\Users\Belter\Desktop\temp'的方式來表示windows下的路徑,隻知道不用修改成path ='C://Users//Belter//Desktop//temp',也不會報錯。最近才發現,用r''的方式表示的字元串叫做raw字元串,用于抑制轉義。
raw字元串 s =r'C:\new'中,r''的功能就是把"\n"變成"\\n",進而使轉義字元失效。但python中好像沒有用來對一個字元串變量進行raw轉換的函數,今天遇到了類似于counrty='u.k.'這樣的國家名稱,把country放到正規表達式中,不能正确的比對,是因為包含'.'字元的緣故('.'在正規表達式中是一個元字元,可以代表任意字元)。
如果字元串中不帶轉義字元,則帶不帶r'',字元串的意思都是一樣的,例如 spam = r'hello' eggs = 'hello' 上面兩個變量表示字元串沒有任何差别。
下面是一個小測試: >>> t1 = '\n' #非raw字元,也就是轉義字元,表示'換号' >>> t1 '\n' >>> print t1
>>> t2 ='skkskdjk \tskdsk \n' >>> len(t2) #在非raw字元串中,\t和\n表示一個字元,是以t2的長度為15 15
>>> for x int2: printrepr(x)
's' 'k' 'k' 's' 'k' 'd' 'j' 'k' '\t' 's' 'k' 'd' 's' 'k' '\n'
>>> t3 = t2.replace('\t',r'\t').replace('\n', r'\n') #替換轉義字元 >>> t3 'skkskdjk\\tskdsk\\n' >>> len(t3) #替換後,'\\'表示'\','t'表示't'本身,是以t3的長度為17 17
将一個字元串變量轉換成raw字元串: escape_dict={'\a':r'\a', '\b':r'\b', '\c':r'\c', '\f':r'\f', '\n':r'\n', '\r':r'\r', '\t':r'\t', '\v':r'\v', '\'':r'\'', '\"':r'\"', '\0':r'\0', '\1':r'\1', '\2':r'\2', '\3':r'\3', '\4':r'\4', '\5':r'\5', '\6':r'\6', '\7':r'\7', '\8':r'\8', '\9':r'\9'}
def raw(text): #将每個可能的轉義字元都進行了替換 """Returnsa raw string representation of text""" new_string='' for charin text: try:new_string+=escape_dict[char] except KeyError:new_string+=char returnnew_string
參考: http://www.jb51.net/article/56154.htm http://www.gossamer-threads.com/lists/python/python/75572 # 這裡對raw string的解釋很不錯 http://code.activestate.com/recipes/65211-convert-a-string-into-a-raw-string/