在正则表达式中执行减法

时间:2018-10-29 17:45:30

标签: ruby regex

我有以下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(或任何一种)正则表达式引擎可能无法执行数学运算,但是我都找不到答案。这可能吗?

2 个答案:

答案 0 :(得分:1)

不。

就我所见过的每个定义而言,正则表达式都是关于文本处理的。它是基于字符的模式匹配。数字是Regex中的一类文本字符,并不表示其数值。尽管syntactic sugar可能掩盖了实际操作,但您仍然需要将文本转换为数字值以执行减法。

WikiPedia

RubyDoc

答案 1 :(得分:1)

如果您知道格式将保持一致,则可以执行以下操作:

output.scan(/\d+/).map(&:to_i).inject(:-)

它不是通过正则表达式进行减法,但确实使其更加简洁。