Вы можете проанализировать их с помощью scan
:
s.scan(/\(\d+\)|\d/)
Например:
>> scores = %w{00100300800 32004300X 00(11)34000 0000(15)000X 0000(15)000(13) 10(18)47(11)8(10)3}
>> scores.each { |s| puts s.scan(/\(\d+\)|\d/).inspect }
["0", "0", "1", "0", "0", "3", "0", "0", "8", "0", "0"]
["3", "2", "0", "0", "4", "3", "0", "0"]
["0", "0", "(11)", "3", "4", "0", "0", "0"]
["0", "0", "0", "0", "(15)", "0", "0", "0"]
["0", "0", "0", "0", "(15)", "0", "0", "0", "(13)"]
["1", "0", "(18)", "4", "7", "(11)", "8", "(10)", "3"]
А затем просто удалите скобки и вызовите to_i
:
s.scan(/\(\d+\)|\d/).map { |s| s[/\d+/].to_i }
Например:
>> scores.each { |s| puts s.scan(/\(\d+\)|\d/).map { |s| s[/\d+/].to_i }.inspect }
[0, 0, 1, 0, 0, 3, 0, 0, 8, 0, 0]
[3, 2, 0, 0, 4, 3, 0, 0]
[0, 0, 11, 3, 4, 0, 0, 0]
[0, 0, 0, 0, 15, 0, 0, 0]
[0, 0, 0, 0, 15, 0, 0, 0, 13]
[1, 0, 18, 4, 7, 11, 8, 10, 3]