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篇 原始字符串的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第86篇 常用字符串方法之截断字符串

Python入门教程第87篇 常用字符串方法之替换子串

Python入门教程第84篇 常用字符串方法之大小写转换

Python入门教程第84篇 常用字符串方法之大小写转换

Python入门教程第86篇 常用字符串方法之截断字符串

Python入门教程第31篇 sorted()函数