Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢?
1.r(R)
r意为raw,表示不包含转义字符的原生字符串。常见的转义字符包括下列几种:| 转义字符 | 描述 || ———– | ——————————————————– || \\(在行尾时) | 续航符 || \\\\ | 反斜杠符号 || \’ | 单引号(字符串需要为""形式) || " | 双引号(需要字符串用需要为\’\’形式) || \\b | 退格(Backspace) || \\000 | 空 || \\n | 换行 || \\v | 纵向制表符 || \\t | 横向制表符 |
下面是几个转义字符的演示:
print("Hello\\,world")# Hello,worldprint("Hello\\\\,world")# Hello\\,worldprint("Hello\',world")# Hello\',worldprint(\'Hello",world\')# Hello",worldprint("Hello\\b,world")# Hell,worldprint("Hello\\000,world")#Hello,worldprint("Hello\\n,world")# Hello# ,worldprint("Hello\\v,world")# Hello# ,worldprint("Hello\\t,world")# Hello ,worldprint("Hello\\020,world")
r前缀的作用就是告诉解释器,我这个字符串不包含转义字符,比如字符串中如果包含\’\\n\’,则不将其视为换行符,而视为一个\’\\\’字符和\’n\’字符来处理。如下面所示:
print("Hello,\\nworld")# Hello,# worldprint("Hello,\\nworld")# Hello,\\nworld
r前缀最常见的用途是正则表达式,因为正则匹配的模式经常包含各种反斜杠等字符,我们不希望它被解析为转移字符,因此需要加上\’r\’。如
import restr_pat= re.compile(r\'\\d+/\\d+/\\d+\')text = \'Today is 12/10/2021, yesterday is 12/11/2021\'res = str_pat.findall(text)print(res)[\'12/10/2021\', \'12/11/2021\']
1.u(U)
u(U)前缀表示字符串的编码方式为unicode。不仅包含中文在内的任意字符串都可以采用unicode编码。一般英文字符串在任何编码的情况下都能正常解析,所以一般不用显式添加u。然而中文最好要说明其编码,否则编码转换时就会出现乱码(比如本来用gbk编码但拿unicode来解码)。解决编码问题一劳永逸的方法是在
.py
的文件头添加如下内容:
# coding: utf-8
参考文献
- [1] https://www.python.org/
- [2] Martelli A, Ravenscroft A, Ascher D. Python cookbook[M]. " O\’Reilly Media, Inc.", 2005.