Python raw string并不是“原始”字符串

前两天处理字符串的时候,因为需要做一些字符转义,比如说要把原字符串中所有的单引号前面加个反斜杠,给反斜杠前面再加个反斜杠啥的。一开始想着是这么写:

s.replace("'", "\\'").replace("\\", "\\\\")

后来觉得反斜杠太多了,实在不太美观,就想着能不能用raw string来代替:

s.replace(r"'", r"\'").replace(r"\", r"\\")

但是这个是会报错的,而且还是语法错误,SyntaxError: unexpected character after line continuation character。

后来翻了一下文档,发现raw string并不像我想当然的一样,会原封不动地展现字符串原始的模样(或许是因为名字具有误导性)。事实上,raw string仍然会进行转义。有一句话概括得很好:

When an ‘r’ or ‘R’ prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string.

简单翻译一下就是,raw string的行为是保留所有的反斜杠和反斜杠后面一个字符。这也就是说,raw string与普通字符串的区别在于会保留全部反斜杠(普通字符串会因为转义而丢掉一部分反斜杠)。

这里为什么报错,因为反斜杠后面一个字符(也就是代表字符串结束的引号)也被保留并视作字符串的一部分了。事实上,如果不加r前缀,只有一个反斜杠的普通字符串也是会报错的。

说了一堆废话,只是想说明,raw string并不是字符串处理时的“银弹”,还是要考虑一些特殊情况。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值