繁体   English   中英

如何修改 Ruby 中的字符串,以便将所有撇号实例替换为反斜杠撇号

[英]How to modify string in Ruby such that all instances of apostrophe are replaced with backslash apostrophe

我想将诸如“这是鲍勃的句子”这样的字符串修改为“这是鲍勃的句子”

我的研究似乎表明以下应该有效

"This is Bob's sentence".gsub("'", "\\\\'")

但我得到的结果是

“这是 Bobs 消息”

我在 Rails 应用程序中执行此操作。 也许应用程序中的其他东西导致了这个问题? 如果你能告诉我你知道应该工作的 ruby​​ 方法,我将不胜感激。 提前致谢。

您可以像这样使用捕获:

puts "This is Bob's sentence".gsub(/(\w\')/, '\1\\')
This is Bob'\s sentence

您可以在正则表达式中捕获 parens () ,然后您可以使用\\1对其进行修改。 您可以拥有多个捕获组,它们按出现的顺序编号。

有关更多信息,请参见类似示例https://ruby-doc.org/core-2.7.0/String.html#gsub

mu 引用的每个线程太短

"This is Bob's sentence".gsub("'", "\\\\\\\\\\'")

这很烦人,但这里有一个有效的解决方案:

sentence = "This is Bob's sentence"
sent_arr = sentence.gsub("'", "\\").split('')
sent_arr.each_index.select{|i| sent_arr[i] == "\\"}.each{|i| sent_arr.insert(i+1, "'") }
final_sentence = sent_arr.join
puts final_sentence

基本上:

  1. "'"替换为"\\\\" (仅计为一个索引),并从中创建一个数组。
  2. 在数组中找到"\\\\"每个索引,在每个索引之后的位置插入一个"'"
  3. 将数组连接成一个字符串。

尽管该变量似乎有两个反斜杠 ( \\\\ ) 实例,但当您puts该变量时,您会看到它只有一个。

(具有讽刺意味的是,如果您不以代码形式将其放在此响应中,即使 StackOverflow 也会对反斜杠进行转义……我不得不放置 3 个反斜杠以使其看起来像 2 个!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM