天天看點

Python raw字元串(raw strings)

轉自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/