赞
踩
本篇我们介绍一下 Python 中的原始字符串(raw strings ),它可以将字符串中的反斜线当作普通字符处理。
在 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
s = r'\\\'
SyntaxError: EOL while scanning string literal
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。