读取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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Flex4加载swf文件通过自定义冒泡事件通讯
- Flash – Lint工具的动作脚本?
- 在Oracle中使用Dapper QueryMultiple
- C语言正则表达式详解 regcomp() regexec() regfree()详解
- Flex 一些数据的验证(邮箱,字符串,日期,年龄,性别)
- 推荐一个强大和灵活的处理XML的开源框架---GenXDM
- 如何使用正则表达式删除Java中的SUB(HEX:1A)控制字符?
- postgresql – Postgres 9.6升级后极慢的查询执行
- 让所有的setter函数返回对c中的对象的引用是否很好?
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](二)