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 相关文章推荐
django接入新浪微博OAuth的方法
Jun 29 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
python协程之动态添加任务的方法
Feb 19 Python
python同时替换多个字符串方法示例
Sep 17 Python
python的命名规则知识点总结
Oct 04 Python
wxpython绘制音频效果
Nov 18 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
python实现简单贪吃蛇游戏
Sep 29 Python
python3中编码获取网页的实例方法
Nov 16 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
基于MySQL体系结构的分析
2013/05/02 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
php日历制作代码分享
2014/01/20 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
jquery中:input和input的区别分析
2011/07/13 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
angular2使用简单介绍
2016/03/01 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
Python中zfill()方法的使用教程
2015/05/20 Python
使用requests库制作Python爬虫
2018/03/25 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
Python os库常用操作代码汇总
2020/11/03 Python
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
2015年党支部公开承诺书
2015/01/22 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis