使用gsub和块反转捕获组(Ruby)

时间:2013-12-26 11:55:23

标签: ruby

是否可以做这样的事情(不修改此代码):

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在块中。

4 个答案:

答案 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"