我有一个带两个单引号的字符串。即"女士的女士"
我想避开这些引号,所以我得到了:"女士的女士的"。
我尝试过以下几种:
> "lady's lady's".gsub("'", "\'")
=> "ladys lady'ss ladyss"
> "lady's lady's".gsub("'", "\\'")
=> "lady\'s lady\'s"
> "lady's lady's".gsub("'", "'")
=> "lady's lady's"
有什么帮助吗?
传统上,需要转义的字符是非字母数字字符。例如,Perl的quotemeta
可以转义所有不是数字、字母或下划线的内容。
您可以使用gsub
:复制这种行为
str = "lady's lady's"
puts str.gsub(/(?=W)/, '\')
输出
lady's lady's
如果您特别不希望转义撇号以外的任何内容,那么regex很容易更改,用(?=')
替换(?=W)
。
注意
结果
> "lady's lady's".gsub("'", "\'")
=> "ladys lady'ss ladyss"
是因为使用«'»
的文字替换字符串将每个撇号替换为全局变量$'
的值——匹配后的字符串。
因此,第一个撇号被«s lady's»
取代,第二个被«s»
取代,从而产生奇异的«ladys lady'ss ladyss»
。
您必须使用«\'»
的文字替换字符串来替换为仅«'»
使用前瞻性并避免替换撇号会整洁得多:
> puts "lady's lady's".gsub(/(?=')/, '\')
lady's lady's
=> nil
"lady's lady's".gsub("'", "\\'") # => "lady\'s lady\'s"
正如@Neil所提到的,见下文:
"lady's lady's".gsub(/'/, "\\'").chars.to_a
# => ["l",
# "a",
# "d",
# "y",
# "\",
# "'",
# "s",
# " ",
# "l",
# "a",
# "d",
# "y",
# "\",
# "'",
# "s"]