python原始字符串是指在引号前添加 r 或 R 的字符串,如 r'hello'。
原始字符串是为了解决ascii字符和正则表达式特殊字符间的冲突而产生的,但实际应用范围可以更广泛。其本质原理就是取消字符串由输入到读入内存过程中ascii特殊字符的含义,使其按字面形式读入内存。
>>> p = r'\n'
>>> p
'\\n'
>>> print p
\n
>>> t = '\\n'
>>> t
'\\n'
>>> print t
\n
>>> if t == p :
print True
True
在上面的代码中,可以发现 r‘\n’ 和 '\\n'是等价的,事实上 r‘\n’ 只是为了书写方便而发明的另一种记法而已。可以看到 p 输出的是 '\\n',也就是说p在内存中的记法就是 '\\n',而不会把 r 也读入内存。
下面解释一段正则表达式中容易让人迷惑的代码:我们要找一对原始的 \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'
\n在ASCII中代表换行,而在正则表达式中也是特殊符号,为了让RE编译器把'\n'当成你想要表达的字符串,而不是换行,需要另一个反斜线对它进行转义\\n。上面 r'\\[rtfvn]'中的 r 是为了将两个反斜线都读入内存 ,再次证明 r 只作用在读入内存的过程中。
利用原始字符串输入路径:
>>> path = r'C:\windows\temp' + '\\'
>>> print path
C:\windows\temp\
上面 r 是为了取消 \temp中 \t 部分的特殊含义,为避免发生错误,在书写路径名时最好都用 r 声明。
单个\ 不能紧挨着引号,不然会报错。