从字符串中删除反斜杠

12

我之前回答了一个问题,该问题是关于如何从字符串中移除反斜杠。这是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
错误是可以计数的。有3个。 - Shashank
6
@Shashank:即使它们是无限的,它们几乎肯定不会是_不可数的_。有人在胡言乱语或者过分夸张。 (因为我认为那个人是我,所以可能是前者。:) - abarnert
4个回答

22
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的代码已经做了你试图做的事情。显然他有一些其他的问题无法解释。(考虑到他停止回答评论并删除了他的问题,我的第一赌注会是某个愚蠢的拼写错误...) 所以,即使你正确地编写了你的代码,它也不会太有帮助。

无论如何,这不是太难数了。

再说了,评论并没有说这是太难数了,只是难以数清。有些人数到三都有困难。甚至英国国王的神职人员也要提醒他们如何做


13

这个字符串中没有斜杠或反斜杠。 反斜杠被用来转义引号 ', 尽管它们不必这样做,因为该字符串是用 "" 包围的。

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
让我描述一下整个出现问题的情况。
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"
上述代码片段直接摘自文档。

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被用来转义特殊字符:这里有详细说明:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接