gpt4 book ai didi

ruby - 在 ruby​​ 中解析一个非常特殊的字符串结构(棒球数据)

转载 作者:数据小太阳 更新时间:2023-10-29 08:18:59 25 4
gpt4 key购买 nike

我正在尝试使用来自 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

我确定解决方案涉及正则表达式,我很不擅长,所以我一直在尝试各种糟糕的字符串操作方法。最后,我认为寻求帮助会更好。

那么,你们会怎么做呢?

最佳答案

你可以用 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]

关于ruby - 在 ruby​​ 中解析一个非常特殊的字符串结构(棒球数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com