Как изменить строку в Ruby таким образом, чтобы все апострофы были заменены на backsla sh апостроф - PullRequest
1 голос
/ 20 февраля 2020

Я хочу, чтобы строка, такая как «Это предложение Боба», была изменена на «Это предложение Боба»

Похоже, что мое исследование показывает, что следующее должно работать

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

Но в результате я получаю

"это сообщение с сообщениями Бобса"

Я делаю это в приложении rails , Возможно, что-то еще в приложении вызывает проблему? Если бы вы могли сообщить мне о ruby методе, который, как вы знаете, должен работать, я был бы очень признателен. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

Для каждого потока, на который ссылается mu, слишком короткий

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

1 голос
/ 20 февраля 2020

Вы можете использовать захват следующим образом:

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

Вы фиксируете в регулярном выражении, что находится внутри скобок (), а затем можете изменить его с помощью \1. Вы можете иметь более одной группы захвата, они нумеруются в порядке их появления.

Подробнее см. Аналогичный пример https://ruby-doc.org/core-2.7.0/String.html#gsub

0 голосов
/ 21 февраля 2020

Это раздражает, но вот решение, которое работает:

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. Соедините массив в строку .

Несмотря на то, что переменная будет иметь два экземпляра backsla sh (\\), когда вы puts переменную, вы увидите, что она имеет только один.

(По иронии судьбы, даже StackOverflow избегает обратной косой черты в этом ответе, если вы не поместите его в кодовую форму ... Мне пришлось поставить 3 обратной косой черты, чтобы она выглядела как 2!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...