加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

读取Ruby中当前行以上的n行?

发布时间:2020-12-17 04:02:27 所属栏目:百科 来源:网络整理
导读:我有一个如下所示的数据文件: 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
我有一个如下所示的数据文件:

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读