2009-11-19 2 views
11

У меня есть проблема с заменой строки в Ruby.Как Ruby может выполнить эту задачу (поиск и замена строки в Ruby)?

My Original string: Что делает человек, это не то, что делает животное.

Я хочу заменить на: == Что == человек делает не так, как то, что == животное делает.

У меня проблема с регистром, когда вы используете gsub. (например, что, что) Я хочу сохранить оригинальный текст.

любое решение?

+2

Лучше название может быть, «без учета регистра строки поиска и замены в Рубине». Изменение названия на что-то подобное может помочь вам привлечь больше людей к вашему вопросу. – donut

ответ

20

Если я правильно вас понял, это то, что вы хотите сделать:

puts "What the human does is not like what animal does.".gsub(/(what)/i, '==\1==') 

, который будет выводить

== Что == человеческое делает не нравится == ==, что животное делает.

+0

Обновлен пример использования флага, нечувствительного к регистру, к регулярному выражению, как было предложено brianegge. – hallski

2

Используйте block form of gsub.

"What the human does is not like what animal does.".gsub(/(what)/i) { |s| "==#{s}==" } 
=> "==What== the human does is not like ==what== animal does." 
+0

Я писал то же самое. Вот документация gsub: http://ruby-doc.org/core/classes/String.html#M000817 –

+0

Обновленная ссылка: http://ruby-doc.org/core-2.3.3/String.html# метод-я-GSUB – Josh

2

другая версия без скобок() в регулярном выражении,

puts "What the human does is not like what animal does.".gsub(/what/i,'==\0==') 

== Что == человек делает не нравится == ==, что животное делает.

3

Важной вещью, которую следует учитывать во всех трех ответах до сих пор, является использование модификатора «i» в регулярном выражении. Это сокращенный способ указать использование опции Regexp::IGNORECASE.

Полезным Рубин Regexp учебник here и класс документирована here

Смежные вопросы