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/
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值