Python入门教程第78篇 原始字符串
Posted 不剪发的Tony老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第78篇 原始字符串相关的知识,希望对你有一定的参考价值。
本篇我们介绍一下 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 文件路径
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 为前缀的字符串是原始字符串。
- 原始字符串中的反斜线是一个字面字符,不具有转义功能。
以上是关于Python入门教程第78篇 原始字符串的主要内容,如果未能解决你的问题,请参考以下文章