[英]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
基本上:
"'"
替換為"\\\\"
(僅計為一個索引),並從中創建一個數組。"\\\\"
每個索引,在每個索引之后的位置插入一個"'"
。 盡管該變量似乎有兩個反斜杠 ( \\\\
) 實例,但當您puts
該變量時,您會看到它只有一個。
(具有諷刺意味的是,如果您不以代碼形式將其放在此響應中,即使 StackOverflow 也會對反斜杠進行轉義……我不得不放置 3 個反斜杠以使其看起來像 2 個!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.