Ruby从字符串中删除`\``?

时间:2013-09-03 11:17:41

标签: ruby

如何从字符串中删除\"

示例:

'"\"asdasd"\"'.gsub('\"', '') # => "\"asdasd\""

为什么\"没有删除?

4 个答案:

答案 0 :(得分:4)

它被删除了。输出中的\"不是反斜杠后跟双引号,它只是一个双引号字符,因为inspect以双引号打印字符串而被转义。如果您尝试打印字符串,它将显示为:

"asdasd"

要稍微扩展一下:'"\"asdasd"\"'(也可以使用双引号作为"\"\\\"asdasd\"\\\""编写)是一个包含双引号的字符串,后跟反斜杠,后跟双引号,然后是asdasd,然后是双引号,接着是反斜杠,然后是双引号。

您对gsub的调用会删除两次反斜杠后跟双引号。结果是"\"asdasd\"",也可以写成'"asdasd"',是一个包含双引号的字符串,后跟asdasd,后跟双引号。所以反斜杠双引号被删除了,但简单的双引号却没有。我认为这是预期的行为。

答案 1 :(得分:0)

在ruby中,特殊符号在转换为字符串时以反斜杠开头。 即"\"\"\\\"

检查一下,你会理解

'"\"asdasd"\"'                               # => "\"\\\"asdasd\"\\\""
'"\"asdasd"\"'.gsub("\\", '')                # => "\"\"asdasd\"\""
'"\"asdasd"\"'.gsub("\\", '').gsub("\"", '') # => "asdasd"

答案 2 :(得分:0)

这是怎么回事?

str = '"\"asdasd"\"'
p str[/\w+/] # => "asdasd"

答案 3 :(得分:0)

确实删除了它们。以下是在更改前inspect编辑时字符串的样子:

'"\"asdasd"\"'               # => "\"\\\"asdasd\"\\\""

以下是:

'"\"asdasd"\"'.gsub('\"','') # => "\"asdasd\""

因此它之前有一些反斜杠引号序列。现在它只有引号。