是否可以做这样的事情(不修改此代码):
a = '1 and 2'
b = a.gsub(/(\d)/) do |match|
# Print 2 and 1, reversing the captures matches
end
我知道我可以执行a.gsub((\ d)和(\ d)),然后将块中匹配的组称为#$ 1和#$ 2,但我想知道是否可以同时捕获1和在没有这样做的情况下,2在块中。
答案 0 :(得分:1)
更短的非gsub解决方案:
a.split(" ").reverse.join(' ')
答案 1 :(得分:1)
完全以这种格式完成它是不可能或者很难的,但这里有一些接近:
"1 and 2".scan(/\d/).reverse.join(" and ")
# => "2 and 1"
答案 2 :(得分:0)
如果您愿意,可以使用非gsub
代码:
a.split(/[^\d]/).select{|s|!s.empty?}.reverse
答案 3 :(得分:0)
我会这样做:
a = '1 and 2'
a.split(" ").reverse.join(" ")
# => "2 and 1"