如何更改字符串中标记之间的值

时间:2011-04-10 19:54:00

标签: ruby ruby-on-rails-3

如果我有以下字符串:

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

如何编辑它以从打印str获得以下输出:

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

我一直在尝试使用'gsub'和'upcase'方法,但我正在努力使用正则表达式来获取我的'%%'符号之间的每个单词。

5 个答案:

答案 0 :(得分:3)

s.gsub(/%%([^%]+)%%/) { $1.upcase }

答案 1 :(得分:3)

ruby-1.9.2-p136 :066 > str.gsub(/%%([^%]+)%%/) {|m| $1.upcase}
 => "hello ONE_BOY's something FOUR_GIRL's something more" 

[^%]+表示它将匹配除%以外的1个或多个字符以及$1is a global variable that stores the back reference to what was matched.

答案 2 :(得分:0)

这是一种快速而又肮脏的方式:

"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)]位切出匹配的中间位置(即剥去前导和尾随的两个字符)。

答案 3 :(得分:0)

如果您能够选择分隔符,则可以使用Facets gem中的String.interpolate

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

但我首先要检查Facets是否与Rails没有任何冲突。

答案 4 :(得分:-1)

str.gsub(/%%([^%]+)%%/) { |match| $1.upcase }