我有以下RSpec输出:
30 examples, 15 failures
我想从第一个减去第二个数字。我有以下代码:
def capture_passing_score(output)
captures = output.match(/^(?<total>\d+)\s*examples,\s*(?<failed>\d+)\s*failures$/)
captures[:total].to_i - captures[:failed].to_i
end
我想知道是否有一种方法可以在正则表达式中进行计算。理想情况下,我避免在代码中执行第二步,并减去正则表达式中的数字。使用Ruby(或任何一种)正则表达式引擎可能无法执行数学运算,但是我都找不到答案。这可能吗?
答案 0 :(得分:1)
不。
就我所见过的每个定义而言,正则表达式都是关于文本处理的。它是基于字符的模式匹配。数字是Regex中的一类文本字符,并不表示其数值。尽管syntactic sugar可能掩盖了实际操作,但您仍然需要将文本转换为数字值以执行减法。
答案 1 :(得分:1)
如果您知道格式将保持一致,则可以执行以下操作:
output.scan(/\d+/).map(&:to_i).inject(:-)
它不是通过正则表达式进行减法,但确实使其更加简洁。