我想在“儿童世界”字符串的撇号前插入反斜杠。有什么简单的方法可以做到吗?
irb(main):035:0> s = "children's world" => "children's world" irb(main):036:0> s.gsub(''', '\'') => "childrens worlds world"
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(gsub("xxx") { "yyy" }),则Ruby直接使用替换字符串"yyy",而不尝试应用替换模式。
gsub("xxx") { "yyy" }
"yyy"
注意:如果您必须创建一个包含大量e1d16d1的替换字符串,您可以利用这样一个事实:当您使用/.../(或%r{...})时,您不必对反斜杠进行双重转义:
/.../
%r{...}
>> puts "children's world".gsub("'", /\'/.source) children's world
或者您可以在此处使用单引号:(使用<<'STR',而不是只使用<<STR)
<<'STR'
<<STR
>> puts "children's world".gsub("'", <<'STR'.strip) \' STR children's world
2skhul332#
>> puts s.gsub("'", "\\'") children's world
0pizxfdo3#
您的问题是,字符串“\‘”对替换字符串中的gSub有意义。为了让它以你想要的方式工作,你必须使用积木形式。
s.gsub("'") {"\'"}
3条答案
按热度按时间kjthegm61#
答案
您需要一些额外的反斜杠:
或者稍微简洁一点(因为您不需要在双引号字符串中转义
'
):或者更简洁地说:
说明
您的
'\\\''
将生成字符串形式的\'
:和
\'
是Ruby中的一种特殊的替换模式。来自ruby-doc.org:您可以使用这些组合引用一些特殊的匹配变量...
'
对应$'
,包含匹配后的字符串因此,
gsub
在第二个参数中看到的\'
被解释为特殊模式(匹配后原始字符串中的所有内容),而不是文字\'
。所以您希望
gsub
看到的实际上是\\'
,它可以由'\\\\\''
或"\\\\'"
产生。或者,如果使用块形式的
gsub
(gsub("xxx") { "yyy" }
),则Ruby直接使用替换字符串"yyy"
,而不尝试应用替换模式。注意:如果您必须创建一个包含大量e1d16d1的替换字符串,您可以利用这样一个事实:当您使用
/.../
(或%r{...}
)时,您不必对反斜杠进行双重转义:或者您可以在此处使用单引号:(使用
<<'STR'
,而不是只使用<<STR
)2skhul332#
0pizxfdo3#
您的问题是,字符串“\‘”对替换字符串中的gSub有意义。为了让它以你想要的方式工作,你必须使用积木形式。