как изменить значения между тегами в строке - PullRequest
0 голосов
/ 10 апреля 2011

Если у меня есть следующая строка:

str="hello %%one_boy%%'s something %%four_girl%%'s something more"

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

"hello ONE_BOY's something FOUR_GIRL's something more"

Я пытался использовать 'gsubМетоды 'и' upcase ', но я борюсь с регулярным выражением, чтобы получить каждое слово между моими символами' %% '.

Ответы [ 5 ]

3 голосов
/ 11 апреля 2011
ruby-1.9.2-p136 :066 > str.gsub(/%%([^%]+)%%/) {|m| $1.upcase}
 => "hello ONE_BOY's something FOUR_GIRL's something more" 

[^%]+ говорит, что будет соответствовать 1 или более символов, кроме%, а $1 - это глобальная переменная, в которой хранится обратная ссылка на то, что было найдено.

3 голосов
/ 11 апреля 2011
s.gsub(/%%([^%]+)%%/) { $1.upcase }
0 голосов
/ 11 апреля 2011

Если вы можете выбрать разделители, вы можете использовать String.interpolate из самоцвета Facets:

one_boy = "hello".upcase
str = "\#{one_boy}!!!"
String.interpolate{ str }    #=> "HELLO!!!"

Но я бы сначала проверил, что Facets не вызывает конфликтов с Rails.

0 голосов
/ 11 апреля 2011

Вот быстрый и грязный способ:

"hello %%one_boy%%'s something %%four_girl%%'s something more".gsub(/(%%.*?%%)/) do |x|
    x[2 .. (x.length-3)].upcase
end

Бит x[2 .. (x.length-3)] вырезает середину совпадения (т. Е. Удаляет начальные и конечные два символа).

0 голосов
/ 11 апреля 2011
str.gsub(/%%([^%]+)%%/) { |match| $1.upcase }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...