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中的多线程编程
Apr 09 Python
Python脚本暴力破解栅栏密码
Oct 19 Python
分享一下如何编写高效且优雅的 Python 代码
Sep 07 Python
基于python实现简单日历
Jul 28 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
如何通过Django使用本地css/js文件
Jan 20 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
python中validators库的使用方法详解
Sep 23 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实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
学生会主席演讲稿
2014/04/25 职场文书
2015年教育实习工作总结
2015/04/24 职场文书