簡體   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