Ruby on rails Ruby:复制两行

Ruby on rails Ruby:复制两行,ruby-on-rails,ruby,text,row,Ruby On Rails,Ruby,Text,Row,我是Ruby的新手。 我有一个示例(输入文本),如: 我需要在“message”标记后面的行中放一行。请注意,这一行可以使用“message”进行编辑和关闭,如 我试过这样做: if line =~/Message/ 但它当然不会搜索下一行 有人能帮我捕捉标记“Message”和“--”之间的行吗 如果您知道一些示例,请键入链接 更新:全部代码 require 'csv' data = [] File.foreach("new7.txt") do |line| line.chomp!

我是Ruby的新手。 我有一个示例(输入文本),如:

我需要在“message”标记后面的行中放一行。请注意,这一行可以使用“message”进行编辑和关闭,如

我试过这样做:

if line =~/Message/ 
但它当然不会搜索下一行

有人能帮我捕捉标记“Message”和“--”之间的行吗 如果您知道一些示例,请键入链接

更新:全部代码

require 'csv'
data = []
File.foreach("new7.txt") do |line|
  line.chomp!
  if line =~ /Revision/
    data.push [line]
  elsif line =~ /Author/
    if data.last and not data.last[1]
      data.last[1] = line
    else
      data.push [nil, line]
    end
  elsif line=~/^Message:(.*)^-/m 
    if data.last and not data.last[2]
      data.last[2] = line
    else
      data.push [nil, nil, line]
    end
  end
end

CSV.open('new1.csv', 'w') do |csv|
  data.each do |record|
    csv << record
  end
    enter code here
输出csv文件:

您可以使用
/^Message:(.*)^-/m
作为正则表达式。
/m
允许您跨行边界进行匹配。看

更新#1:以下是irb的样本输出:

Peters-MacBook-Air-2:bot palfvin$ irb
1.9.3p194 :001 > line = "\nMessage:first-line\nsecond-line\n---\nthird-line"
 => "\nMessage:first-line\nsecond-line\n---\nthird-line" 
1.9.3p194 :002 > line =~ /^Message:(.*)^-/m
 => 1 
1.9.3p194 :003 > $1
 => "first-line\nsecond-line\n" 
1.9.3p194 :004 > 

我刚才检查了一下,其他类似的问题也被问了/回答了。你先搜索了吗?我想知道我们是应该把这个标记为重复的还是有什么东西让你找不到它。@PeterAlfin非常感谢你!但是,如果我这样使用这个表达式是否正确:如果line=~/^Message:(.*)^-/不幸的是,它不起作用否,您需要在正则表达式的末尾(后面的斜杠后面)使用
m
。这是关键的启用码。@PeterAlfin我试着这样写:if line=~/^Message:(.*)^-/m,但它不正确。“/m”怎么正确?不确定发生了什么。你能给我看一下周围的代码和完整的输出吗?请参阅更新以了解我所看到的示例。
require 'csv'
data = []
File.foreach("new7.txt") do |line|
  line.chomp!
  if line =~ /Revision/
    data.push [line]
  elsif line =~ /Author/
    if data.last and not data.last[1]
      data.last[1] = line
    else
      data.push [nil, line]
    end
  elsif line=~/^Message:(.*)^-/m 
    if data.last and not data.last[2]
      data.last[2] = line
    else
      data.push [nil, nil, line]
    end
  end
end

CSV.open('new1.csv', 'w') do |csv|
  data.each do |record|
    csv << record
  end
    enter code here
Revision: 37407
Author: imakarov
Date: 21 июня 2013 г. 10:23:28
Message:my infomation
dmitry name
Peters-MacBook-Air-2:bot palfvin$ irb
1.9.3p194 :001 > line = "\nMessage:first-line\nsecond-line\n---\nthird-line"
 => "\nMessage:first-line\nsecond-line\n---\nthird-line" 
1.9.3p194 :002 > line =~ /^Message:(.*)^-/m
 => 1 
1.9.3p194 :003 > $1
 => "first-line\nsecond-line\n" 
1.9.3p194 :004 >