0

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

Message:
update attributes in file and commit version
----
Modified

我需要在“消息”标签之后的行中插入一行。请注意,此行可以使用“消息”关闭并关闭,例如

Message:update attributes in file and commit version

我试过这样:

if line =~/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

输入文件:

Revision: 37407
Author: imakarov
Date: 21 июня 2013 г. 10:23:28
Message:my infomation
dmitry name

输出 csv 文件: 在此处输入图像描述

4

1 回答 1

2

您可以/^Message:(.*)^---/m用作您的正则表达式。允许您跨行/m边界进行匹配。见http://rubular.com/r/FhqiKx0XyI

更新 #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 > 
于 2013-06-22T20:35:21.537 回答