从字符串中删除反斜杠

时间:2015-05-11 00:18:29

标签: python

之前我回答了一个问题,OP询问他如何从字符串中删除反斜杠。这是OP的字符串中反斜杠的样子:

"I don\'t know why I don\'t have the right answer"

这是我的回答:

a = "I don\'t know why I don\'t have the right answer"
b = a.strip("/")
print b

这删除了字符串中的反斜杠,但我的回答被低估了,我收到一条评论说“我的回答有很多问题,这很难计算”我完全相信我的答案可能是错的,但我想知道为什么我可以从中学习。但是,作者删除了这个问题,所以我无法回复那里的评论来提出这个问题。

4 个答案:

答案 0 :(得分:20)

a = "I don\'t know why I don\'t have the right answer"
b = a.strip("/")
print b
  1. 斜杠(/)和反斜杠(\)不是同一个字符。字符串中没有任何斜杠,所以你正在做的事情没有效果。
  2. 即使你使用了反斜杠,反正a也没有反斜杠;非原始字符串文字中的\'只是一个'字符。
  3. strip仅删除“前导和尾随字符”。由于您试图删除字符串中间的字符,因此无效。
  4. 也许是一些元问题:

    1. OP的示例字符串实际上只有反斜杠,而不是反斜杠转义的撇号,即使他的问题标题说后者。所以你解决了一个不同的问题。 OP可能比你的错更多,但它仍然不是一个好的答案。
    2. OP的代码已经完成了你想要做的事情。他显然有一些他无法解释的其他问题。 (鉴于他不再回答评论并删除了他的问题,我的第一个赌注就是在某处愚蠢的错字......)所以,即使你正确地编写了代码,也没那么有用。
    3. 无论如何,这并不算太多。

      然而,评论并没有说它太多了,无法计算。有些人难以计入 4 3。甚至是Kings of the Britons have to be reminded by their clerics how to do it

答案 1 :(得分:12)

嗯,字符串中没有斜杠,也没有反斜杠。反斜杠转义为',尽管它们没有,因为字符串是用""分隔的。

print("I don\'t know why I don\'t have the right answer")
print("I don't know why I don't have the right answer")

产地:

I don't know why I don't have the right answer
I don't know why I don't have the right answer

此外,您使用了错误的字符,strip只删除字符串末尾的字符:

Python 2.7.9 (default, Mar  1 2015, 12:57:24) 
>>> print("///I don't know why ///I don't have the right answer///".strip("/"))
I don't know why ///I don't have the right answer

要将反斜杠放入字符串中,您也需要将其转义(或使用原始字符串文字)。

>>> print("\\I don't know why ///I don't have the right answer\\".strip("/"))
\I don't know why ///I don't have the right answer\

正如您所看到的那样,即使反斜杠位于字符串的开头和结尾处,它们也不会被删除。

最后,回答原来的问题。一种方法是在字符串上使用https://developers.google.com/google-apps/spreadsheets/#fetching_specific_rows_or_columns方法:

>>> print("\\I don't know why \\\I don't have the right answer\\".replace("\\",""))
I don't know why I don't have the right answer

此外,在您搞砸了自己的答案之后伸出一个好答案的道具=)。

答案 2 :(得分:5)

让我描述整个错误的事情

a = "I don\'t know why I don\'t have the right answer"
          ^                 ^

在这里你可以看到两个反斜杠实际上都是逃避了具有保存含义的字符文字'

现在来看你的代码,str.strip究竟做了什么?来自文档:

  

返回字符串的副本,并删除前导和尾随字符

所以当你编写一段代码时,你不是删除反斜杠,而是删除字符串末尾的正斜杠(如果有的话)!

b = a.strip("/")

但是在显示时没有反斜杠。这是因为反斜杠仅用于内部python表示,当你打印它们时,它们将被解释为它们的转义字符,因此你不会看到反斜杠。您可以看到repr输出以获得更好的视图。

但需要注意的是,在使用"表示字符串时,根本不需要反斜杠。所以

a = "I don't know why I don't have the right answer"

足够了!

官方python documentation

中涵盖了这个主题
>>> 'spam eggs'  # single quotes
'spam eggs'
>>> 'doesn\'t'  # use \' to escape the single quote...
"doesn't"
>>> "doesn't"  # ...or use double quotes instead
"doesn't"

以上代码段直接取自文档。

答案 3 :(得分:4)

\正在转义',而不需要使用双引号。如果你只是打印a,你就不会看到它们,所以b = a.strip("/")实际上什么都不做。

In [7]: a = "I don\'t know why I don\'t have the right answer"

In [8]: a
Out[8]: "I don't know why I don't have the right answer"

单引号:

In [19]: a = 'I don\'t know why I don\'t have the right answer'

In [20]: a
Out[20]: "I don't know why I don't have the right answer"

如果您实际上尝试从字符串中删除实际的\,则可以使用string.strip("\\")或替换/删除string.replace("\\","")\'s用于{{3}特殊字符:

  

反斜杠(\)字符用于转义具有特殊含义的字符,例如换行符,反斜杠本身或引号字符。