转自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:
'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',
def raw(text): #将每个可能的转义字符都进行了替换
参考:
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/