python中的原始字符串"r"
2012-10-25 19:38
316 查看
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 #改用原始字符串
>>> if m is not None: m.group()
...
'blow'
你可能注意到我们在正则表达式里使用“\d”,没用原始字符串,也没出现什么问题。那是因为 ASCII 里没有对应的特殊字符,所以正则表达式编译器能够知道你指的是一个十进制数字。
例子:
>>> '\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 "<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()
转自:http://hi.baidu.com/setcookie/item/bb5c1932c76aa0159cc65e3b
你可能已经看到前面关于原始字符串用法的一些例子了。原始字符串的产生正是由于有正则表达式的存在。原因是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 里没有对应的特殊字符,所以正则表达式编译器能够知道你指的是一个十进制数字。
例子:
>>> '\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 "<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()
转自:http://hi.baidu.com/setcookie/item/bb5c1932c76aa0159cc65e3b
相关文章推荐
- Python 正则表达式辨析,原始字符串
- python处理字符串时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- Python原始字符串(raw strings)用法实例
- 以写代学:python 原始字符串操作符&&字符串内建函数
- Python中的原生字符串"r"
- python的u'字符串"(字符编码):字符串前有u,表示字符串以unicode格式存储
- Python r 原始字符串(raw strings)的用法
- Python基础语法——(引号、字符串、长字符串、原始字符串、Unicode)
- python的u'字符串"(字符编码):字符串前有u,表示字符串以unicode格式存储
- python 入门之 长字符串、原始字符串和unicode
- python学习 原始字符串操作符 print
- python字符串——"奇葩“的内置函数
- python 多个字符串 "a",'b',"c"=('a', 'b', 'c')
- Python 将字节类型转换为"十六进制"字符串
- python基础知识之字符串的表示、单/双/转义引号字符串、长字符串、原始字符串、unicode字符串
- python 多个字符串合并操作"a" 'b' "c"="a"+'b'+"c"=abc
- Python中原始字符串操作符 r R
- 转:核心笔记 : Python 原始字符串(raw strings)的用法
- 原始字符串的使用以及如何在末尾加入反斜杠"\"
- Python之字符串格式化,"format"替代"%"