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 相关文章推荐
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
pycharm 配置远程解释器的方法
Oct 28 Python
Python日志无延迟实时写入的示例
Jul 11 Python
python:动态路由的Flask程序代码
Nov 22 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python基于Socket实现简单聊天室
Feb 17 Python
Pytest mark使用实例及原理解析
Feb 22 Python
django model object序列化实例
Mar 13 Python
为什么说python更适合树莓派编程
Jul 20 Python
详解python日志输出使用配置文件格式
Feb 10 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 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 HTML代码串截取代码
2008/12/29 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python实现内存监控系统
2021/03/07 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
外语系毕业生找工作的求职信
2013/11/28 职场文书
八年级美术教学反思
2014/02/02 职场文书
工地宣传标语
2014/06/18 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
2015年教研工作总结
2015/05/23 职场文书
杨善洲电影观后感
2015/06/04 职场文书
保护动物的宣传语
2015/07/13 职场文书
公司员工奖惩制度
2015/08/04 职场文书
八年级数学教学反思
2016/02/17 职场文书
索尼ICF-5900W收音机测评
2022/04/24 无线电