Python:Python字符串中的r、u和转义字符
Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢?
1.r(R)
r意为raw,表示不包含转义字符的原生字符串。常见的转义字符包括下列几种:
转义字符 | 描述 |
---|---|
\(在行尾时) | 续航符 |
\\ | 反斜杠符号 |
' | 单引号(字符串需要为""形式) |
" | 双引号(需要字符串用需要为''形式) |
\b | 退格(Backspace) |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
下面是几个转义字符的演示: |
print("Hello\
,world")
# Hello,world
print("Hello\\,world")
# Hello\,world
print("Hello',world")
# Hello',world
print('Hello",world')
# Hello",world
print("Hello\b,world")
# Hell,world
print("Hello\000,world")
#Hello,world
print("Hello\n,world")
# Hello
# ,world
print("Hello\v,world")
# Hello
# ,world
print("Hello\t,world")
# Hello ,world
print("Hello\020,world")
r前缀的作用就是告诉解释器,我这个字符串不包含转义字符,比如字符串中如果包含'\n',则不将其视为换行符,而视为一个'\'字符和'n'字符来处理。如下面所示:
print("Hello,\nworld")
# Hello,
# world
print("Hello,\nworld")
# Hello,\nworld
r前缀最常见的用途是正则表达式,因为正则匹配的模式经常包含各种反斜杠等字符,我们不希望它被解析为转移字符,因此需要加上'r'。
如
import re
str_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
如果不加这一行,有时就会出现如下所示的编码解析错误:
SyntaxError: Non-ASCII character '\xe5' in file main.py on line 86, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
参考文献
- [1] https://www.python.org/
- [2] Martelli A, Ravenscroft A, Ascher D. Python cookbook[M]. " O'Reilly Media, Inc.", 2005.
数学是符号的艺术,音乐是上界的语言。