MEMOO
MEMOO
Published on 2025-04-21 / 4 Visits
0
0

Python原始字符串(raw string)

摘要:在本教程中,你将学习 Python 原始字符串(raw strings)以及如何使用它们来处理将反斜杠视为字面字符的字符串。

Python 原始字符串简介

在 Python 中,当你在字符串前加上字母 rR(例如 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)

总结

  • 在字符串字面量前加上字母 rR,即可将其转换为原始字符串。

  • 原始字符串将反斜杠视为字面字符。


Comment