摘要:在本教程中,你将学习 Python 原始字符串(raw strings)以及如何使用它们来处理将反斜杠视为字面字符的字符串。
Python 原始字符串简介
在 Python 中,当你在字符串前加上字母 r
或 R
(例如 r'...'
或 R'...'
)时,该字符串就成为原始字符串。
与普通字符串不同,原始字符串将反斜杠(\
)视为字面字符。
原始字符串在处理包含许多反斜杠的字符串时非常有用,例如正则表达式或 Windows 系统上的目录路径。
为了表示特殊字符(如制表符和换行符),Python 使用反斜杠(\
)来表示转义序列的开始。例如:
s = 'lang\tver\nPython\t3'
print(s)
输出:
lang ver
Python 3
然而,原始字符串将反斜杠(\
)视为字面字符。例如:
s = r'lang\tver\nPython\t3'
print(s)
输出:
lang\tver\nPython\t3
原始字符串与普通字符串类似,但在原始字符串中,反斜杠(\
)是按字面意义处理的(而在普通字符串中,若要表示反斜杠字面量则需使用双反斜杠 (\\
)。
s1 = r'lang\tver\nPython\t3'
s2 = 'lang\\tver\\nPython\\t3'
print(s1 == s2) # True
在普通字符串中,Python 将一个转义序列视为单个字符:
s = '\n'
print(len(s)) # 1
然而,在原始字符串中,Python 将反斜杠(\
)视为一个字符:
s = r'\n'
print(len(s)) # 2
由于反斜杠(\
)会对单引号('
)或双引号("
)进行转义,因此原始字符串不能以奇数个反斜杠结尾。
例如:
s = r'\'
错误:
SyntaxError: EOL while scanning string literal
或者:
SyntaxError: EOL while scanning string literal
使用原始字符串处理 Windows 上的文件路径
Windows 操作系统使用反斜杠来分隔路径。例如:
c:\user\tasks\new
如果你将该路径作为普通字符串使用,Python 会报出多个错误:
dir_path = 'c:\user\tasks\new'
错误:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX escape
Python 会将路径中的 \u
视为 Unicode 转义符,但无法对其进行解码。
现在,如果你对第一个反斜杠进行转义,你还会遇到其他问题:
dir_path = 'c:\\user\tasks\new'
print(dir_path)
输出:
c:\user asks
ew
在这个示例中\t
表示一个制表符,而 \n
表示换行符。
为了简化处理,你可以将路径转换为原始字符串,如下所示:
dir_path = r'c:\user\tasks\new'
print(dir_path)
将普通字符串转换为原始字符串
要将普通字符串转换为原始字符串,可以使用内置的 repr()
函数。例如:
s = '\n'
raw_string = repr(s)
print(raw_string)
输出:
'\n'
注意:结果原始字符串在字符串的开头和结尾都带有引号。要去掉这些引号,可以使用切片操作:
s = '\n'
raw_string = repr(s)[1:-1]
print(raw_string)
总结
在字符串字面量前加上字母
r
或R
,即可将其转换为原始字符串。原始字符串将反斜杠视为字面字符。