在ruby中以递归方式匹配两行之间的所有行

时间:2015-08-07 06:34:24

标签: ruby regex textmate

我想匹配以“SLX-”开头的两行之间的所有行(包括第一行),将它们转换为逗号分隔行,然后将它们附加到文本文件中。

原始文本文件的截断版本如下所示:

Book.where({id: 1}).fetch({withRelated: ['author']}).then(function(book) {
   console.log(JSON.stringify(book.related('author')));
});

我想红宝石看起来像

  1. 使用SLX-将两行之间的所有/ n转换为逗号
  2. 将原始文本文件另存为新文本文件(甚至更好的CSV文件。
  3. 我认为我特别关注如何查找和替换两个特定行。

    我想我可以在不使用ruby的情况下做到这一点,但看到我正试图进入Ruby ......

2 个答案:

答案 0 :(得分:1)

假设您的字符串位于str

require 'csv'
CSV.open("/tmp/file.csv", "wb") do |csv|
  str.scan(/^(SLX-.*?)(?=\R+SLX-)/m).map do |s| # break by SLX-
    s.first.split($/).map do |el|               # split by CR
      "'#{el}'"                                 # quote values
    end                           
  end.each do |line|                            # iterate
    csv << line                                 # fulfil csv
  end
end

答案 1 :(得分:0)

我对Ruby不太了解,但这应该有效。您应该将整个文件读入Sting。使用此正则表达式 - (\RSLX-) - 匹配所有SLX-(除第一个之外的所有内容)并将其替换为,SLX-。有关正则表达式的说明,请转到https://regex101.com/r/pP3pP3/1

这个问题 - Ruby replace string with captured regex pattern - 可能会帮助您了解如何在ruby中替换