Regex может сканировать различные части:
> s = "Hello 12345 (0) (1) (65)"
> value = s.scan(/((.*)\((\d+)\)\z)/).first
Это будет соответствовать любой строке, за которой следует '(', затем любое количество цифр, затем ')', затем конец строки. Затем у вас есть массив, которым вы можете манипулировать. (Неэкранированные) круглые скобки в приведенном выше шаблоне группируют входные данные:
значение равно ["Hello 12345 (0) (1) (65)", "Hello 12345 (0) (1)", "65"]
Это тот случай, когда их объединяют
"#{value[1]}(#{value[2].to_i + 1})"
Очевидно, это не касается случаев ошибок и т. Д., Но дает вам начало