【发布时间】:2012-02-14 16:57:16
【问题描述】:
我正在尝试使用来自 retrosheet.org 的数据编写一个小型棒球统计程序,但我无法解析他们的线分数据。在一场比赛中,一支球队在任何特定局中都没有得分上双,他们的线得分看起来像这样001003000(他们在第三局得分 1 分,在第六局得分 3 分)。但是,如果一支球队的得分达到两位数,则数据将如下所示00100(10)000(第三场比赛有 1 场比赛,第六场比赛有 10 场比赛)。
现在,我只是试图解析出每一局的比分并将其放入一个数组中。这是我目前所拥有的:
scores = %w{00100300800 32004300X 00(11)34000 0000(15)000X 0000(15)000(13) 10(18)47(11)8(10)3}
scores.each do |s|
game = []
if s.include? "("
# HELP!
else
s.each_char { |c| game << c }
end
puts game.join("+")
end
我确定解决方案涉及正则表达式,我不擅长,所以我一直在尝试各种糟糕的字符串操作方法。最后,我认为寻求帮助会更好。
那么,你们会怎么做呢?
【问题讨论】:
-
我会写一个非常小的解析器而不使用正则表达式。
-
有趣的是,我能写的最小的解析器确实是slower而不是正则表达式。
-
@louism 如果您使用基于 C 的
StringScanner,它可能会执行得更快。 -
@Phrogz,很高兴知道。 String#[] 和 String#each_char 的表现似乎很糟糕。