Выполнить вычитание в регулярном выражении - PullRequest
0 голосов
/ 29 октября 2018

У меня есть следующий вывод 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 голосов
/ 29 октября 2018

Если вы знаете, что формат будет оставаться согласованным, вы можете сделать что-то вроде этого:

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

Он не выполняет вычитание с помощью регулярных выражений, но делает его более кратким.

0 голосов
/ 29 октября 2018

Нет.

По каждому определению, которое я когда-либо видел, Регулярные выражения относятся к обработке текста. Это символьное сопоставление с образцом. Числа представляют собой класс текстовых символов в Regex и не представляют их числовые значения. Хотя синтаксический сахар может маскировать то, что на самом деле делается, вам все равно нужно преобразовать текст в числовое значение, чтобы выполнить вычитание.

WikiPedia

RubyDoc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...