我有一个包含产品数据的大型ruby文件。我正在尝试将文件拆分为基于正则表达式的部分。我的产品标题由单词Product
表示,后跟空格,然后是数字。在那之后,我有一堆包含产品信息的行。
格式如下所示。
产品1:
...data
产品2:
...数据
...
产品N:
...数据
从文件中读取时,我想忽略产品标题,而只显示产品数据。为此,我试图根据正则表达式拆分文件。
file = File.read('products.txt')
products = file.split(/\Aproduct \d+:\z/i)
此正则表达式有效并找到所有产品标题。问题是,文件没有被分成适当的部分。
当我运行puts products[0],
时,整个文件将被打印到控制台。
答案 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