首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 原始字符串(r 前綴)詳解:禁止轉義、正則表達式與 Windows 路徑的最佳實踐

     編輯:更多程式設計知識

在 Python 字符串字面量前加 r 或 R 前綴,創建「原始字符串」。它的核心語義:反斜杠 \ 不再作為轉義字符,而是字面量本身。本文詳細說明其行為邊界、常見應用場景及注意事項。

基本對比

>> print("asdfas\n")      # 普通字符串:\n 被解析為換行
asdfas

>>> print(r"asdfas\n")   # 原始字符串:\n 保持原樣
asdfas\n

核心規則

  1. 所有反斜杠保留原意:\n、\t、\\、\xhh、\uhhhh 等均不轉義。
  2. 引號仍需轉義:字符串內部的同類引號仍需用反斜杠轉義,否則語法錯誤。
    >> r'it\'s ok'   # 正確
    "it's ok"
    >>> r"say \"hi\"" # 正確
    'say "hi"'
    
  3. 不能以單個反斜杠結尾:r"abc\" 語法錯誤,因為結尾引號被反斜杠「轉義」了。需寫 r"abc\\" 或 "abc\\"。
  4. 前綴不區分大小寫:r""、R"" 效果相同。
  5. 可與其他前綴組合:rf""(Python 3.6+ f-string)、rb""(bytes)、ru""(Python 2 兼容)。

三大典型應用場景

1. 正則表達式模式

正則本身大量使用 \(如 \d、\w、\b、\\),普通字符串需雙重轉義 \\d,極易出錯。

2. Windows 文件路徑

Windows 路徑使用反斜杠分隔,普通字符串需寫 "C:\\Users\\Name\\Docs"。

3. 文檔字符串與多行文本

進階:原始字符串與編碼

原始字符串僅影響源碼編譯階段的轉義處理,不影響運行時編碼。運行時它們仍是普通 str 對象,編碼為 UTF-8(Python 3 默認)。

>> s = r'\u4e2d'
>>> s
'\\u4e2d'          # 長度 6,字面反斜杠+u4e2d
>>> len(s)
6
>>> s.encode('utf-8')
b'\\\\u4e2d'

若需 Unicode 轉義生效,請勿用 r 前綴,或使用 bytes.decode('unicode_escape')。

常見誤區

誤區正確認知
r 字符串不能包含反斜杠恰恰相反,專為保留反斜杠設計
r"\n" 會換行不會,輸出字面 \n
可用 r"..." 表示以反斜杠結尾的路徑不可,結尾反斜杠會轉義引號,導致語法錯誤
r 前綴改變運行時行為僅影響編譯期詞法分析,運行時無差別

最佳實踐建議

  1. 正則表達式:永遠使用 r"" 定義模式。
  2. Windows 路徑:優先用 pathlib.Path(跨平台、語義化),次選 r""。
  3. 文檔/模板:包含大量反斜杠的多行文本用 r"""..."""。
  4. 源碼可讀性:凡涉及反斜杠字面量,統一加 r,減少認知負荷。

原始字符串是 Python 為處理「反斜杠密集」場景提供的語法糖,正確使用能消除大量雙重轉義帶來的 Bug,提升代碼可讀性與維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved