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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
Python3遍历目录树实现方法
May 22 Python
Python实现读取json文件到excel表
Nov 18 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
python正则实现提取电话功能
Feb 24 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
使用 Python 遍历目录树的方法
Feb 29 Python
python中altair可视化库实例用法
Jan 26 Python
python线程优先级队列知识点总结
Feb 28 Python
Python 阶乘详解
Oct 05 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
用户的详细注册和判断
2006/10/09 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
php模拟post提交数据的方法
2015/02/12 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
JQuery里选择超链接的实现代码
2011/05/22 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
vue router 组件的高级应用实例代码
2019/04/08 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
Python3写入文件常用方法实例分析
2015/05/22 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
给水工程专业毕业生自荐信
2014/01/28 职场文书
授权委托书怎么写
2014/04/03 职场文书
支部书记四风对照材料
2014/08/28 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
学生通报表扬范文
2015/05/04 职场文书
golang 语言中错误处理机制
2021/08/30 Golang