【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 为前缀的字符串是原始字符串。
  • 原始字符串中的反斜线是一个字面字符,不具有转义功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不剪发的Tony老师

为 5 个 C 币而折腰。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值