0

如何用单个反斜杠替换字符串中的双反斜杠?

我试图用 来做到这一点"\\a\\b\\c".gsub!("\\\\","\\"),但这不起作用。

4

2 回答 2

0

在红宝石字符串中,反斜杠是开始“转义序列”的特殊第一个字符,因此:

\\ - means single backslash

为了更好地理解这个例子可能会有所帮助:

  >> s = "\\ha"
  => "\\ha"
  >> s.split(//)
  => ["\\", "h", "a"]

如您所见,您只有 3 个字符,第一个是单个反斜杠,由转义序列表示\\

现在我们用双反斜杠替换单反斜杠

   >> s.gsub!("\\","\\\\\\")
   => "\\\\ha"
   >> s.split(//)
   => ["\\", "\\", "h", "a"]

我们的字符串现在是 4 个字符,第一个和第二个是反斜杠。

现在我们通过用单个反斜杠替换双反斜杠来回到原始字符串

   >> s.gsub!("\\\\","\\")
   => "\\ha" 
   >> s.split(//)
   => ["\\", "h", "a"]

上面的示例使用以下测试:ruby 1.8.7,irb 0.9.5

于 2012-08-08T10:58:07.173 回答
0

疯狂的猜测,因为我对红宝石一无所知:

可能是反斜杠在字符串中具有特殊含义吗?试试这个:

"\a\b\c".gsub!("\\\\","\\")
于 2012-07-14T10:16:36.460 回答