如何在Ruby中向字符串中添加单个反斜杠字符?

u0sqgete  于 2022-09-21  发布在  Ruby
关注(0)|答案(3)|浏览(132)

我想在“儿童世界”字符串的撇号前插入反斜杠。有什么简单的方法可以做到吗?

irb(main):035:0> s = "children's world"
=> "children's world"
irb(main):036:0> s.gsub(''', '\'')
=> "childrens worlds world"
kjthegm6

kjthegm61#

答案

您需要一些额外的反斜杠:

>> puts "children's world".gsub("'", '\\'')
children's world

或者稍微简洁一点(因为您不需要在双引号字符串中转义'):

>> puts "children's world".gsub("'", "\\'")
children's world

或者更简洁地说:

>> puts "children's world".gsub("'") { "\'" }
children's world

说明

您的'\\\''将生成字符串形式的\'

>> puts '\''
'

\'是Ruby中的一种特殊的替换模式。来自ruby-doc.org:

您可以使用这些组合引用一些特殊的匹配变量...'对应$',包含匹配后的字符串

因此,gsub在第二个参数中看到的\'被解释为特殊模式(匹配后原始字符串中的所有内容),而不是文字\'

所以您希望gsub看到的实际上是\\',它可以由'\\\\\''"\\\\'"产生。

或者,如果使用块形式的gsub(gsub("xxx") { "yyy" }),则Ruby直接使用替换字符串"yyy",而不尝试应用替换模式。

注意:如果您必须创建一个包含大量e1d16d1的替换字符串,您可以利用这样一个事实:当您使用/.../(或%r{...})时,您不必对反斜杠进行双重转义:

>> puts "children's world".gsub("'", /\'/.source)
children's world

或者您可以在此处使用单引号:(使用<<'STR',而不是只使用<<STR)

>> puts "children's world".gsub("'", <<'STR'.strip)
  \'
STR
children's world
2skhul33

2skhul332#

>> puts s.gsub("'", "\\'")
children's world
0pizxfdo

0pizxfdo3#

您的问题是,字符串“\‘”对替换字符串中的gSub有意义。为了让它以你想要的方式工作,你必须使用积木形式。

s.gsub("'") {"\'"}

相关问题