美文网首页
python的一个原始字符串的问题?

python的一个原始字符串的问题?

作者: 950545c4cd64 | 来源:发表于2018-05-06 15:27 被阅读0次

print r'c:\problem Files\foo''\\'

那么问题来了,为什么后面要有两条反斜线呢?

1.链接:https://www.zhihu.com/question/28332958/answer/135206878。

以上答案说的都不太对,其实是因为raw并不是取消了所有的转义,Python规定的raw字符串非常奇怪,非常让人崩溃,它是有转义机制的,只是会转义成原始的字符,我们来看一下官方文档原文:

Even in a raw literal, quotes can be escaped with a backslash, but thebackslash remains in the result; for example, r"\"" is a valid stringliteral consisting of two characters: a backslash and a double quote; r"\"is not a valid string literal (even a raw string cannot end in an odd number ofbackslashes).  Specifically,a raw literal cannot end in a single backslash(since the backslash would escape the following quote character).  Note alsothat a single backslash followed by a newline is interpreted as those twocharacters as part of the literal,notas a line continuation.

也就是说,raw字符串仍然按照有转义的方式解析,但所有应当转义的字符都转义成了反斜杠 + 被转义字符,也就是说和转义前保持不变,但是仅有一个地方不一样,就是引号的转义:

r'\'' == '\\\''

这个引号仍然被转义了,但是是转义成反斜杠 + 引号。这是Python的raw字符串一个非常奇怪的特征。

Python的反斜杠可以跟任意字符,对有效的转义字符来说会变成转义字符,对无效的转义字符来说会保留反斜杠,因此对于大多数情况来说并没有可以感知的区别,但是问题就在于如果字符串以奇数个反斜杠结束,最后多出来的一个反斜杠就会转移到结束的引号,这就出问题了,所以Python的raw字符串不能以奇数个反斜杠结束。所以在题主的题目中,这个以反斜杠结束的字符串是用两部分拼起来的:不以反斜杠结束的部分 + 反斜杠。后面一个字符串不是raw string,所以用普通的转义方式,写两个反斜杠。

另一个特例是回车符,大部分人应该不知道Python可以在字符串中转义回车符:

'abc\def'# 'abcdef'

跑到raw字符串当中就变成了

r'abc\def'# 'abc\\\ndef'

反斜杠保留,回车符也保留

相关文章

  • python的一个原始字符串的问题?

    print r'c:\problem Files\foo''\\' 那么问题来了,为什么后面要有两条反斜线呢? 1...

  • 大话python字符串

    一、字符串类型 python3: python语言有两种不同的字符串,一个用于存储文本,一个用于存储原始字节。文本...

  • python字符串前缀 u和r的区别

    (1) 以r或R开头的python中的字符串表示(非转义的)原始字符串, python里面的字符,如果开头处有个r...

  • 关于Python中以字母r/R,或字母u/U 开头的字符串

    1. 以r或R开头的python中的字符串表示(非转义的)原始字符串 python里面的字符,如果开头处有个r,比...

  • Python原始字符串

    如果字符串中包含\,我们可以通过\来转义: 如果字符串中包含多个\,每一个\前面都加一个\太麻烦了我们可以使用Py...

  • 字符串

    string 字符串的表示 repr python表达形式,会输出目标类型 原始字符 原始字符对于反斜线不会有特殊...

  • python r原生字符串

    普通字符串常量含有转义字符,会按照转义字符的意义输出,如下: raw strings(原始字字符串)在python...

  • Python中的字符串前缀

    1.带r前缀的字符串 Python在字符串前面的r,代表raw,即raw string,原始字符串的意思,不需要识...

  • 大神解惑|为什么要用UTF-8

    小白在学习 Python 中的“字符串”这个基本概念时,问了大神这样一个问题:既然 Python 内部的字符串都是...

  • python3新特性(一) 字符串

    从python2转到python3的第一个问题就是字符串的问题,我花了些时间把我能想到的和字符串处理有关的东西都整...

网友评论

      本文标题:python的一个原始字符串的问题?

      本文链接:https://www.haomeiwen.com/subject/arjurftx.html