从字符串中删除反斜杠

Removing backslashes from string

提问人:Joe T. Boka 提问时间:5/11/2015 最后编辑:Bhargav RaoJoe T. Boka 更新时间:5/11/2015 访问量:30601

问:

我之前回答了一个问题,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

这删除了字符串中的反斜杠,但我的答案被否决了,我收到了一条评论,说“我的答案有很多问题,很难计算”我完全相信我的答案可能是错误的,但我想知道为什么,这样我就可以从中吸取教训。但是,该问题已被作者删除,因此我无法回复那里的评论来问这个问题。

评论

1赞 Shashank 5/11/2015
错误是可以数的。有 3 个。
6赞 abarnert 5/11/2015
@Shashank:即使它们是无限的,它们几乎肯定不会是不可数的。有人是个白痴或过于夸张。(因为我认为某人是我,所以可能是前者:)

答:

4赞 Padraic Cunningham 5/11/2015 #1

使用双引号时不需要转义 which。如果你只是打印,你也不会看到它们,所以实际上什么也没做。\'ab = 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

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

13赞 luk32 5/11/2015 #2

好吧,字符串中没有斜杠,也没有反斜杠。反斜杠转义,尽管它们不必转义,因为字符串用 分隔。'""

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\

正如你所看到的,即使反斜杠在字符串的开头和结尾,它们也没有被删除。

最后,回答原来的问题。一种方法是对字符串使用 replace 方法:

>>> 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

此外,在你搞砸了自己的答案后伸出援手寻求好答案的道具=)。

5赞 Bhargav Rao 5/11/2015 #3

让我描述一下整个错误

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 文档中被广泛地涵盖

>>> '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"

上面的代码片段直接取自文档。

22赞 abarnert 5/11/2015 #4
a = "I don\'t know why I don\'t have the right answer"
b = a.strip("/")
print b
  1. 斜杠 () 和反斜杠 () 不是同一个字符。字符串中的任何位置都没有斜杠,因此您正在执行的操作将不起作用。/\
  2. 即使你使用了反斜杠,反正也没有反斜杠; 在非原始字符串中,文字只是一个字符。a\''
  3. strip 仅删除“前导和尾随字符”。由于您正在尝试删除字符串中间的字符,因此无济于事。

也许还有一些元问题:

  1. OP 的示例字符串实际上只有反斜杠,而不是反斜杠转义的撇号,尽管他的问题标题说的是后者。所以你正在解决一个不同的问题。这可能更像是 OP 的错,而不是你的错,但这仍然不是一个好的答案。
  2. OP 的代码已经完成了您尝试执行的操作。他显然还有其他一些他无法解释的问题。(鉴于他停止回复评论并删除了他的问题,我的第一个赌注是,这是某处的愚蠢错别字......因此,即使您正确地编写了代码,它也不会那么有用。

无论如何,这并不算太多。

话又说回来,评论并没有说太多了,数不清,只是数不清。有些人很难数到三。即使是不列颠国王也必须被他们的神职人员提醒如何去做