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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章