Python字串中的r和u

orion發表於2021-12-10

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

參考文獻

  • [1] https://www.python.org/
  • [2] Martelli A, Ravenscroft A, Ascher D. Python cookbook[M]. " O'Reilly Media, Inc.", 2005.

相關文章