Ruby去除字符串中的反斜杠

4

如何将这个字符串变成没有斜杠的普通字符串?

我有如下代码:

 "3e265629c7ff56a3a88505062dd526bd\""

我希望:

"3e265629c7ff56a3a88505062dd526bd"

1
你的意思是字符串中不应该有反斜杠和双引号吗?因为反斜杠表示后面的双引号是字符串的一部分。但是你的例子却去掉了字符串末尾的双引号。 - lurker
2
斜杠是 /,反斜杠是 \。这两者的区别可能看起来很微小,但在 Ruby 中它们有完全不同的含义,因此非常重要。 - tadman
6个回答

9

您所拥有的:

"3e265629c7ff56a3a88505062dd526bd\""

等同于:

'3e265629c7ff56a3a88505062dd526bd"'

所以要移除它:
string.tr!('"', '')

请记住,所有特殊字符都需要使用反斜杠进行转义。这不仅包括像换行符\n或回车符\r之类的内容,还包括引号"或反斜杠本身\\


1
只是出于好奇,你为什么使用“tr”而不是“sub”或“gsub”? - spickermann
7
这是因为tr在删除或重新映射字符方面非常快速。gsub可以给你相同的结果,但它需要编译和应用正则表达式,无法匹配tr的简单性和速度。对于单个调用,差异微不足道,但在循环中,使用tr会有巨大的收益。 - tadman

5

这个怎么样?

s = "3e265629c7ff56a3a88505062dd526bd\""
s[/\w+/]
# => "3e265629c7ff56a3a88505062dd526bd"

4
不多人知道可用正则表达式的 String#[] 方法,所以这很有趣。 - tadman

3
如果您想删除除字母和数字以外的所有内容,可以使用“tr”函数。
例如:
"3e265629c7ff56a3a88505062dd526bd\"".tr('^A-Za-z0-9','')

这个函数将除了字母和数字以外的所有字符替换成一个没有字符的字符串。 这里 是该函数的参考。

希望它能对你有用。


2

这是另一种方式:"3e265629c­7ff56a3a88­505062dd52­6bd\"".del­ete ?"


这是最直接的答案,也是我会回答的方式。我想知道为什么后来的回答需要更间接的方式,并且甚至被投票支持。 - sawa
那是因为我比其他人晚看到这个问题 :D - Raghu

1
str = "3e265629c7ff56a3a88505062dd526bd\""
str.gsub(%r{\"}, '')
 => "3e265629c7ff56a3a88505062dd526bd"

1

Ruby的String#[]是你的好帮手。从以下开始:

foo = "3e...bd\""

以下是获取值的替代方法,无需尾随嵌入引号:

# delete it
foo[-1] = ''
foo['"'] = ''
foo[/"$/] = ''

或者:

# skip it
foo[0..-2]

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