你怎么不能在Ruby中gsub这个字符串?

时间:2014-03-13 17:32:40

标签: ruby regex

这些\\n出现在我的字符串中,即使它只应该是\n

但如果我这样做:

"\n".gsub('\\n','\b')

它返回:

"\n"

理想情况下,我正在尝试找到一个可以重写此字符串的正则表达式:

"R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\\nZjTX\\n"

不显示两个反斜杠,但只显示一个:

"R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\nZjTX\n"

但我所做的任何正则表达都行不通。我可以编写\n并在其中放置X之类的东西,但是如果我在其中添加\,那么Ruby会使用额外的\来逃避它,这会导致我的{{1}}加密模块,因为它需要具体。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

在双引号与单引号的字符串中使用时,你陷入了不同的转义含义的陷阱。双引号字符串允许使用转义字符。因此,这里"\n"实际上是包含单个换行符的单字符字符串。将其与'\n'进行比较,gsub是一个包含字面反斜杠后跟字符n的双字符字符串。

这解释了,您的"\\n".gsub('\n','\b') 并不匹配。如果您使用以下代码,它应该工作:

string = "R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\\nZjTX\\n"
new_string = string.gsub("\\n", "\n")

对于您的实际问题,您可以使用此

{{1}}