按模式分割 ruby 文件?
Splitting a ruby file at a pattern?
我有一个包含产品数据的大型 ruby 文件。我正在尝试根据正则表达式将文件分成多个部分。我的产品 headers 由 Product
后跟 space 和数字表示。在那之后,我有一堆包含产品信息的行。
格式如下。
Product 1:
...data
Product 2:
...data
...
Product N:
...data
从文件中读取时,我想忽略产品 Headers,而只显示产品数据。为此,我尝试根据正则表达式拆分文件。
file = File.read('products.txt')
products = file.split(/\Aproduct \d+:\z/i)
此正则表达式有效并找到所有产品 headers。问题是,文件没有被拆分成适当的部分。
当我 运行 puts products[0],
时,整个文件被打印到控制台。
文件会被读取完整,没有办法避免。但是您可以遍历每一行并忽略与表达式匹配的行:
File.open("file.txt", "r") do |file|
file.each_line do |line|
if # condition
#fancy stuff
else
# not that fancy
end
end
\A
和 \z
分别匹配字符串的开头和结尾。而您想要的是匹配一行的开头和结尾。相反,您应该使用 ^
和 $
锚点:
/^product \d+:$/i
我有一个包含产品数据的大型 ruby 文件。我正在尝试根据正则表达式将文件分成多个部分。我的产品 headers 由 Product
后跟 space 和数字表示。在那之后,我有一堆包含产品信息的行。
格式如下。
Product 1:
...data
Product 2:
...data
...
Product N:
...data
从文件中读取时,我想忽略产品 Headers,而只显示产品数据。为此,我尝试根据正则表达式拆分文件。
file = File.read('products.txt')
products = file.split(/\Aproduct \d+:\z/i)
此正则表达式有效并找到所有产品 headers。问题是,文件没有被拆分成适当的部分。
当我 运行 puts products[0],
时,整个文件被打印到控制台。
文件会被读取完整,没有办法避免。但是您可以遍历每一行并忽略与表达式匹配的行:
File.open("file.txt", "r") do |file|
file.each_line do |line|
if # condition
#fancy stuff
else
# not that fancy
end
end
\A
和 \z
分别匹配字符串的开头和结尾。而您想要的是匹配一行的开头和结尾。相反,您应该使用 ^
和 $
锚点:
/^product \d+:$/i