在模式中拆分ruby文件?

时间:2015-05-06 16:06:05

标签: ruby regex file split partitioning

我有一个包含产品数据的大型ruby文件。我正在尝试将文件拆分为基于正则表达式的部分。我的产品标题由单词Product表示,后跟空格,然后是数字。在那之后,我有一堆包含产品信息的行。

格式如下所示。

  

产品1:

...data
     

产品2:

     

...数据

     

...

     

产品N:

     

...数据

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

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

此正则表达式有效并找到所有产品标题。问题是,文件没有被分成适当的部分。

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

2 个答案:

答案 0 :(得分:1)

该文件将被完整填写,无法避免。但是你可以迭代每一行并忽略与表达式相匹配的那一行:

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

答案 1 :(得分:1)

\A\z分别匹配字符串的开头和结尾。而你想要的是匹配一行的开头和结尾。相反,您应该使用^$锚:

/^product \d+:$/i