2013-06-22 4 views
0

Я новичок в Ruby. У меня есть образец (ввод текста), как:Ruby: копировать два ряда

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

мне нужно поставить в соответствие строку после «сообщение» тега. Обратите внимание, что эта строка может быть и близко с «сообщение», как

Message:update attributes in file and commit version 

Я пробовал так:

if line =~/Message/ 

Но, конечно, это не поиск следующей строки.

Может кто-нибудь помочь мне, как поймать строк между тегами «Message» и «---» Если вы знаете, некоторые примеры, пожалуйста, введите ссылку

Update: весь код

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 файл: enter image description here

ответ

2

Вы можете использовать /^Message:(.*)^---/m в качестве вашего регулярного выражения. /m позволяет вам сопоставлять границы строк. См http://rubular.com/r/FhqiKx0XyI

Update # 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 > 
+1

Я только что проверил и другие подобные вопросы были заданы/ответили на SO. Вы сначала искали? Мне интересно, следует ли отмечать это как дублирующее, или если что-то мешало вам найти его. –

+0

@PeterAlfin большое спасибо! Но верно ли это, если я использую это выражение следующим образом: if line = ~/^ Message: (. *)^-/Несчастливо он не работает –

+0

Нет, вам нужно 'm' в конце регулярного выражения (после конечная косая черта). Это ключевой фактор. –