如果我有以下字符串:
str="hello %%one_boy%%'s something %%four_girl%%'s something more"
如何编辑它以从打印str获得以下输出:
"hello ONE_BOY's something FOUR_GIRL's something more"
我一直在尝试使用'gsub'和'upcase'方法,但我正在努力使用正则表达式来获取我的'%%'符号之间的每个单词。
答案 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个或多个字符以及$1
is 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 }