我有以下内容:text.gsub(/(lower) (upper)/, '\1 \2')
我可以只替换\2
大写吗?
类似于:sed -e 's/\(abc\)/\U\1/'
这可以在Ruby中使用吗?
答案 0 :(得分:6)
请参阅gsub文档:
str.gsub(pattern){| match | block}→new_str
在块形式中,当前匹配字符串作为参数传入,并且将适当地设置诸如$ 1,$ 2,$`,$&和$'的变量。块返回的值将替换每次调用的匹配。
"a lower upper b".gsub(/(lower) (upper)/){|s| $1 + " " + $2.upcase}
答案 1 :(得分:2)
gsub
接受一个块参数,该参数为每个匹配运行,并将匹配作为参数传递 - 因此您可以随意执行任何操作!例如,要大写字符串中的每个单词:
"ruby blocks are pretty awesome".gsub(/\w+/) do |match|
match.capitalize
end
#=> "Ruby Blocks Are Pretty Awesome"
答案 2 :(得分:2)
我是Ruby的新手 - 几天前刚刚开始使用它,但也许这会起作用?您将能够将反向引用作为bock中名为$n
的变量:
new_text = text.gsub(/(lower) (upper)/){
"#{$1} #{$2.upcase}"
}
<强>更新强>
看起来Brandon在8分钟左右击败了我:)这与AFAIK几乎完全相同