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 替换值的单反斜杠?的主要内容,如果未能解决你的问题,请参考以下文章