Python原始字符串(raw strings)用法实例


Posted in Python onOctober 13, 2014

本文实例讲述了Python原始字符串(raw strings)用法,分享给大家供大家参考。具体如下:
 
Python原始字符串的产生正是由于有正则表达式的存在。原因是ASCII 字符和正则表达式特殊字符间所产生的冲突。比如,特殊符号“\b”在ASCII 字符中代表退格键,但同时“\b”也是一个正则表达式的特殊符号,代表“匹配一个单词边界”。

为了让RE 编译器把两个字符“\b”当成你想要表达的字符串,而不是一个退格键,你需要用另一个反斜线对它进行转义,即可以这样写:“\\b”。

但这样做会把问题复杂化,特别是当你的正则表达式字符串里有很多特殊字符时,就更容易令人困惑了。一般来说,原始字符串经常被用于简化正则表达式的复杂程度。

事实上,很多Python 程序员在定义正则表达式时都只使用原始字符串。

下面的例子用来说明退格键“\b” 和正则表达式“\b”(包含或不包含原始字符串)之间的区别:

>>> m = re.match('\bblow', 'blow') # backspace, no match #退格键,没有匹配>>> if m is not None: m.group()

...

>>> m = re.match('\\bblow', 'blow') # escaped \, now it works #用\转义后,现在匹配了

>>> if m is not None: m.group()

...

'blow'

>>> m = re.match(r'\bblow', 'blow') # use raw string instead #改用原始字符串>>> if m is not None: m.group()

...

'blow'

你可能注意到我们在正则表达式里使用“\d”,没用原始字符串,也没出现什么问题。那是因为ASCII 里没有对应的特殊字符,所以正则表达式编译器能够知道你指的是一个十进制数字。

原始字符串的这个特性让一些工作变得非常的方便,比如正则表达式的创建。正则表达式是一些定义了高级搜索匹配方式的字符串,通常是由代表字符、分组、匹配信息、变量名和字符类等的特殊符号组成。正则表达式模块已经包含了足够用的符号。但当你必须插入额外的符号来使特殊字符表现的像普通字符的时候,你就陷入了“字符数字”的泥潭!这时原始字符串就会派上用场了。

除了原始字符串符号(引号前面的字母“r”)以外,原始字符串跟普通字符串有着几乎完全相同的语法。这个'r'可以是小写也可以是大写,唯一的要求是必须紧靠在第一个引号前。在3个例子的第1个例子里面,我们需要一个反斜杠加一个“n”来而不是一个换行符。

>>> '\n'

'\n'

>>> print '\n'

>>> r'\n'

'\\n'

>>> print r'\n'

\n

接下来的例子里,我们打不开我们的README文件了,为什么?因为'\t'和'\r'被当成不在我们的文件名中的特殊符号,但它们实际上是文件路径中的4个独立的字符。
>>> f = open('C:\windows\temp\readme.txt', 'r') Traceback (most recent call last):

File "", line 1, in ?

f = open('C:\windows\temp\readme.txt', 'r')IOError: [Errno 2] No such file or directory: 'C:\\win- dows\\temp\readme.txt'

>>> f = open(r'C:\windows\temp\readme.txt', 'r')>>> f.readline()

'Table of Contents (please check timestamps for last update!)\n'

>>> f.close()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python 把数据 json格式输出的实例代码
Oct 31 Python
python增加矩阵维度的实例讲解
Apr 04 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
python 函数中的参数类型
Feb 11 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
浅析Python面向对象编程
Jul 10 Python
Python连接mysql方法及常用参数
Sep 01 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
python中__call__方法示例分析
Oct 11 #Python
python多重继承实例
Oct 11 #Python
Python之PyUnit单元测试实例
Oct 11 #Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 #Python
跟老齐学Python之编写类之四再论继承
Oct 11 #Python
Python使用MySQLdb for Python操作数据库教程
Oct 11 #Python
跟老齐学Python之编写类之三子类
Oct 11 #Python
You might like
分享PHP入门的学习方法
2007/01/02 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python 字符串换行的多种方式
2018/09/06 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
python如何输出反斜杠
2020/06/18 Python
《寓言两则》教学反思
2014/02/27 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
房屋过户委托书范本
2014/10/07 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis