Ruby正则表达式在相邻方法之间插入新行

时间:2013-04-21 21:38:05

标签: ruby regex sed

我正在尝试在我的ruby文件中的适当位置添加新行。 有些文件的代码如下:

def abc
  ...
end
def pqr
  ...
end

我想在适当的位置添加新行,如下所示:

def abc
  ...
end  

def pqr
  ...
end

这样代码更具可读性。我提出的初始正则表达式为def.*?defm开关根据def关键字进行匹配。但是这个正则表达式也匹配def关键字,这些关键字已经被一个空白的新行分隔。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以执行/end\ndef/之类的操作(您可能需要使用\ r \ n,具体取决于您在编辑器中使用的行结束模式)。

这将匹配文字end,然后是换行符,紧接着是文字def

只需在额外的换行符中替换,它应该可以正常工作!

答案 1 :(得分:1)

在您的行上尝试Enumerable#slice_before

File.readlines('foo.rb').slice_before(/^\s*def\b/).flat_map do |group|
  group << "\n" if group.last =~ /^\s*end\b/
  group
end.join