2015-05-06 11 views
0

我有一个包含产品数据的大型ruby文件。我试图根据正则表达式将文件分割成几部分。我有产品标题由单词Product表示,后跟一个空格,然后是一个数字。之后,我有一堆包含产品信息的行。在模式中分割红宝石文件?

格式如下所示。

产品1:

...data 

产品2:

...数据

...

产品N:

...数据

从文件中读取时,我想忽略产品标题,而只显示产品数据。为此,我试图根据正则表达式来分割文件。

file = File.read('products.txt') 
products = file.split(/\Aproduct \d+:\z/i) 

这个正则表达式的工作原理和发现所有产品的标题。问题是,该文件没有被拆分成适当的部分。

当我运行puts products[0],时,整个文件被输出到控制台。

+1

你可能想用'可枚举#slice_before'实验。 –

回答

1

\A\z比赛开始和结束时,分别。而你想要的是匹配一行的开始和结束。相反,你应该使用^$锚:

/^product \d+:$/i 
1

该文件将被完成,没有办法避免它。但你可以遍历每一行,并忽略了expresion相匹配的一个:字符串

File.open("file.txt", "r") do |file| 
    file.each_line do |line| 
    if # condition 
    #fancy stuff 
    else 
    # not that fancy 
    end 
end 
+0

你如何在不阅读内容的情况下跳过内容的某一行? – tebayoso

+0

没关系,我以为你说你不得不一次啜泣整个文件。 –