Ruby gsub 替换值的单反斜杠?

Posted

技术标签:

【中文标题】Ruby gsub 替换值的单反斜杠?【英文标题】:Single backslash for Ruby gsub replacement value? 【发布时间】:2021-08-19 00:23:41 【问题描述】:

有谁知道如何在 Ruby 的 gsub 方法中提供单个反斜杠作为替换值?我认为使用双反斜杠作为替换值会产生一个反斜杠,但它会产生两个反斜杠。

示例:"a\b".gsub("\", "\\")

结果:a\\b

我也使用块得到相同的结果:

示例:"a\b".gsub("\")"\\"

结果:a\\b

显然,我不能对替换值使用单个反斜杠,因为这只会用来转义后面的引号。我还尝试在替换值周围使用单引号(而不是双引号),但结果中仍然出现两个反斜杠。

编辑:感谢评论者,我现在意识到我的困惑在于 Rails 控制台如何报告操作结果(即a\\b)。尽管字符串'a\b''a\\b' 看起来不同,但它们的长度相同:

'a\b'.length(3)

'a\\b'.length(3)

【问题讨论】:

使用单引号确实有效,但单反斜杠表示为“\\”。 puts 结果字符串,或者验证字符串的大小 - 它是 3。 ...注意"a\b".gsub("\", "\\").each_char.map(&:ord) #=> [97, 92, 98]. 这能回答你的问题吗? Ruby replace double backslash with single backslash 【参考方案1】:

您可以用"\\"'\\' 表示单个反斜杠。在 irb 中试试这个,在哪里

 "\\".size

正确输出1,表明你在这个字符串中确实只有一个字符,而不是你想象的2个。你也可以做一个

 puts "\\" 

同样,你的例子

puts("a\b".gsub("\", "\\"))

正确打印

a\b

【讨论】:

以上是关于Ruby gsub 替换值的单反斜杠?的主要内容,如果未能解决你的问题,请参考以下文章

R - gsub 替换反斜杠

替换 R 中的单个反斜杠

为啥单反斜杠变成双反斜杠

如何将带有双反斜杠的字符串转换为单反斜杠

我需要在配置文件中转义反斜杠吗?

使用 Ruby gsub 转义 linux 路径名中的空格