gpt4 book ai didi

ruby - 在 Ruby 中读取当前行上方的 n 行?

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:56 28 4
gpt4 key购买 nike

我有一个如下所示的数据文件:

Things
├── Foo
│  ├── 1. Item One
│  ├── 2. Item Two
│  ├── 3. Item Three
│  ├── 4. Item Four
│  ├── 5. Item Five
│  └── 6. Item Six
├── Bar
│  ├── 1. Item Seven
│  ├── 2. Item Eight
│  ├── 3. Item Nine

我想做的是找到一个特定的字符串、与之关联的数字,以及属于('Foo' 或 'Bar')的副标题

获取项目和编号非常容易:

str = "Item One"
data.each_line do |line|
if line =~ /#{str}/
/(?<num>\d).\s(?<item>.*)/ =~ line
end
end

但我不确定如何获取副标题。我在想的是,一旦我找到这条线,我就可以用这个数字从那一点开始计数。是否有 readlines 或 seek 命令或类似的命令可以执行此操作?

感谢您的帮助!

最佳答案

我想出了下面的办法,这似乎可行:

data = <<-EOF
Things
├── Foo
│ ├── 1. Item One
│ ├── 2. Item Two
│ ├── 3. Item Three
│ ├── 4. Item Four
│ ├── 5. Item Five
│ └── 6. Item Six
├── Bar
│ ├── 1. Item Seven
│ ├── 2. Item Eight
│ ├── 3. Item Nine
EOF

str = "Item One"
data.lines.each_with_index do |line, i|
if /(?<num>\d)\.\s+#{str}/ =~ line
/(?<var>\w+)/ =~ data.lines[i - (n = $~[:num]).to_i]
p [n, str, var] # ["1", "Item One", "Foo"]
end
end

(n = $~[:num]) 用于存储从

中捕获的 num
if /(?<num>\d)\.\s+#{str}/ =~ line

作为last match data进入一个变量(比如n) , 由全局变量 $~ 表示,将在语句中发生的下一个正则表达式匹配期间被覆盖

/(?<var>\w+)/ =~ data.lines[i - (num = $~[:num]).to_i]

除非我们存储它供以后使用,否则我们将丢失捕获的值 num

关于ruby - 在 Ruby 中读取当前行上方的 n 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31925317/

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