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 Web服务器Tornado使用小结
May 06 Python
Python中对列表排序实例
Jan 04 Python
通过源码分析Python中的切片赋值
May 08 Python
python去除字符串中的换行符
Oct 11 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
Python实现点云投影到平面显示
Jan 18 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
Keras设置以及获取权重的实现
Jun 19 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
php strcmp使用说明
2010/04/22 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
python输出指定月份日历的方法
2015/04/23 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
工程部主管岗位职责
2013/11/17 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
python区块链实现简版工作量证明
2022/05/25 Python