python学习之 字符串前'r'的用法

6.4.3 原始字符串操作符( r/R )

关于原始字符串的目的,在 Python1.5 里面已经有说明,是为了对付那些在字符串中出现
的特殊字符(下面的小节会介绍这些特殊字符)。在原始字符串里,所有的字符都是直接按照字
面的意思来使用,没有转义特殊或不能打印的字符。

原始字符串的这个特性让一些工作变得非常的方便,比如正则表达式的创建(详见文档的 re
模块).正则表达式是一些定义了高级搜索匹配方式的字符串,通常是由代表字符,分组、匹配信
息、变量名、和字符类等的特殊符号组成。正则表达式模块已经包含了足够用的符号。但当你
必须插入额外的符号来使特殊字符表现的像普通字符的时候,你就陷入了“字符数字”的泥潭!
这时原始字符串就会派上用场了.
除了原始字符串符号(引号前面的字母"r")以外,原始字符串跟普通字符串有着几乎完全相
同的语法.
这个'r'可以是小写也可以是大写,唯一的要求是必须紧靠在第一个引号前.
在三个例子的第一个例子里面,我们需要一个反斜杠加一个'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):
Edit   By Vheavens 
Edit   By Vheavens                               
File "<stdin>", 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()

最后我们要找一对原始的\n 字符而不是换行。为了找到它,我们使用了一个简单的正则表
达式,它的作用是查找通常被用来表示空白字符的反斜线-字符对(backslash-character
pairs)。

>>> import re
>>> m = re.search('\\[rtfvn]', r'Hello World!\n')
>>> if m is not None: m.group()
...
>>> m = re.search(r'\\[rtfvn]', r'Hello World!\n')
>>> if m is not None: m.group()
...
'\\n'



'r'在正则表达式中的作用:

核心笔记 : Python 原始字符串(raw strings)的用法
你可能已经看到前面关于原始字符串用法的一些例子了。原始字符串的产生正是由于有正则表
达式的存在。原因是 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 #改用原始字符串

'''

说明:上一句第一个参数r'\bblow'中的'\b'这里表示的是单词边界,不过不明白它既然是表示原始字符串为什么不是就表示'\b'这两个字符 '\' 和 'b' 呢,

这才是最原始的吗

不过测试的结果确实是被当成单词边界了,那又怎样表示'\b'这两个字符呢,最原始的哦,

就打比方说我要找'D:\Documents'文件夹下以字母b开头的文件,正则表达式应该怎么写呢?参考如下:

>>>print '\blow', r'\blow', re.search(r'\\blow', r'\blow').group()

输出结果为:low \blow \blow

解释一下,re.search(r'\\blow', r'\blow').group()中第一个参数前两个字符'\\'转换为一个'\','b'即为字母'b',因此与原始字符'\blow'匹配

'''
>>> if m is not None: m.group()
...
'blow'
你可能注意到我们在正则表达式里使用“\d”,没用原始字符串,也没出现什么问题。那是因为
ASCII 里没有对应的特殊字符,所以正则表达 式编译器能够知道你指的是一个十进制数字。

 

 

 

’r'在普通字符串中的使用:

原始字符串的这个特性让一些工作变得非常的方便,比如正则表达式的创建(详见文档的re模块)。正则表达式是一些定义了高级搜索匹配方式的字符串,通常是由代表字符、分组、匹配信息、变量名和字符类等的特殊符号组成。正则表达式模块已经包含了足够用的符号。但当你必须插入额外的符号来使特殊字符表现的像普通字符的时候,你就陷入了“字符数字”的泥潭!这时原始字符串就会派上用场了。

除了原始字符串符号(引号前面的字母“r”)以外,原始字符串跟普通字符串有着几乎完全相同的语法。这个'r'可以是小写也可以是大写,唯一的要求是必须紧靠在第一个引号前。在3个例子的第1个例子里面,我们需要一个反斜杠加一个“n”来而不是一个换行符。

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> print 'abc\ndef'
abc
def
>>> print r'abc\ndef'
abc\ndef
>>> if '\\n' == r'\n':
print '=='


==
>>>

 

转载于:https://www.cnblogs.com/s502/archive/2013/03/22/2975187.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chown 和chgrp 软链接

1.修改文件所属主&#xff1a;chown -R -h owner file_name -R&#xff1a;对该目录下属所有子目录进行同样的操作 -h &#xff1a;修改符号链接文件的属主十不影响链接的使用 eg&#xff1a;chown paper project 文件project的所有权限都给了paper这个人 2.修改文件的…

初始化--代码

public class A{public static int X; //1static A(){X B.Y 1; //2 找B.Y时就会执行YA.X1;}}public class B{public static int Y A.X 1;static B(){}} 调用A.X B.Y,调用时&#xff0c;几乎同时执行类内部的静态数据成员&#xff0c;结果X0,Y1,再调用静态构造函数&a…

WebConfig Authorization 节点

授权的目的是确定是否应该授予某个标识对给定资源请求的访问权限类型。有两种基本方式来授予对给定资源的访问权限&#xff1a; 文件授权文件授权由 FileAuthorizationModule 执行&#xff0c;它在使用 Windows 身份验证时处于活动状态。它执行 .aspx 或 .asmx 处 理程序文件的…

Oracle buffer状态深入剖析

这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA4NDM2.html所做学习笔记1. 什么是buffer之前提过很多次啦&#xff0c; 其实在oracle数据文件中最小的单位就是block, 而用户读取block数据时&#xff0c;oracle就会将block的数据放入缓存&#x…

java整数类型

1.整数数据在java中有三种表达形式&#xff1a;八进制&#xff0c;十进制&#xff0c;十六进制 2.整数类型的取值范围&#xff1a; 数据类型 内存的空间&#xff08;8位等于1字节&#xff09; 取值范围 byte&#xff1a; 8 …

目录与文件的相关操作

绝对路径与相对路径 绝对路径&#xff1a;路径写法一定是由根目录写起&#xff0c;例如&#xff1a;/home/zhangj这个目录。相对路径&#xff1a;不是由/写起&#xff0c;例如由&#xff1a;/home/zhangj要到/home/lostfound下面时&#xff0c;可以写成cd ../lostfound&#xf…

第二章 findxargs

1.find pathname -options [-print - exec/-ok] find 命令格式 2.pathname :目录的路径 3.-print : 将匹配的文件以标准方式输出 4.-exec :对匹配的文件执行该参数的shell命令形式为command space {} space\; 例如&#xff1a;find . -name 1 -exec cat {} \ ; 找到名字是…

数据库使用

1.启动数据库服务器 win r services.msc 找到mysql 右键启动 以管理员身份运行cmd 2.启动: net start mysql 3.关闭&#xff1a;net stop mysql 4.登录&#xff1a; mysql -h ip -P 端口 -u 用户名 -p C:\Windows\system32>mysql -h localhost -P 3306 -u root -p E…

选择不相交区间(贪心算法) By ACReaper

题目的分析被说得有点绕。自己理解是这样&#xff0c;首先由题目我们知道选择的区间都是相互不相交的&#xff0c;除这之外&#xff0c;我们的目标是尽量的让选择的区间达到最大化。 所以我们可以先对齐排序&#xff0c;因为输入是随机的。假设每个区间表示为(x,y)我们可以选择…

php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path

zendframework的示例index.php里有这样一句 set_include_path(. . PATH_SEPARATOR . ../library/. PATH_SEPARATOR . ./application/models/. PATH_SEPARATOR . ./application/lib/. PATH_SEPARATOR . get_include_path()); 不知道 PATH_SEPARATOR是什么&#xff0c;其实就是…

数据库笔记(数据库操作)

1.windows系统下 数据库启动 net start mysql 2.连接与断开服务器 MySQL -h 地址 -p 端口 -u 用户名 -p 密码 3.查看当前数据库 select database(); 4.显示当前时间&#xff0c;用户名&#xff0c;数据库版本 select now(),user(),version(); 5.创建库 1.create data…

转使用jQuery Ajax的内存回收

通过查看jquery API&#xff0c;发现jquery还有一个 complete对象&#xff0c;是请求完成后回调函数 (请求成功或失败之后均调用)。 同时有两个参数XMLHttpRequest, textStatus。所以&#xff0c;我们只需要在请求完成后&#xff0c;将传回的XMLHttprequest对象手工回收即可&am…

java面向对象(引用类型--参数传递)

/* 基本数据类型&#xff1a;方法调用&#xff0c;传的是具体数据 引用数据类型&#xff1a;方法调用&#xff0c;传的是地址*/ class person{String name;public void eat(){System.out.println("persion里调用的"name);} }public class chuancan {public static vo…

Oracle中的Round和Trunc

一、Oracle中的Round和Trunc&#xff1a; 如同对数字进行四舍五入和按位截取一样&#xff0c;Oracle对时间日期也提供了这两种功能。但比起对数字进行四舍五入和截取比较复杂&#xff1a;这是因为时间日期是有格式的。下面看看这两个函数的定义和用途&#xff1a;ROUND(date [,…