2017-03-06 54 views
-2

我想知道用Ruby来完成此操作的最佳方法。我想要的是在query: [ ... ]的文件中发现每个事件后,将所有内容都包裹起来,并保存文件。Ruby找到并替换文件中的每个字符串出现

的示例文本文件将是:

def ronny 
    ronny :create, id: 1, location: nil 
end 

def alex 
    alex :delete, id: 1, location: nil 
end 

def brandy 
    brandy :update, id: 1, location: 555.32 
end 

def tyson 
    tyson :read, id: 1, location: nil 
end 

def sonap 
    sonap :delete, id: 1, location: 31.23 
end 

一个例子的结果将是:

ronny :create, query: [ id: 1, location: nil ] 

brandy :update, query: [ id: 1, location: 555.32 ] 

预期保存的文本文件,结果应改为类似:

def ronny 
    ronny :create, query: [ id: 1, location: nil ] 
end 

def alex 
    alex :delete, query: [ id: 1, location: nil ] 
end 

def brandy 
    brandy :update, query: [ id: 1, location: 555.32 ] 
end 

def tyson 
    tyson :read, query: [ id: 1, location: nil ] 
end 

def sonap 
    sonap :delete, query: [ id: 1, location: 31.23 ] 
end 

任何想法??

+0

如果你有这些的5,只是用手工做。否则,你需要学习一些关于正则表达式的知识。 –

+0

它当然可以通过手工完成..但我很想知道如何在Ruby中做到这一点! –

回答

0
.gsub(/(id: \d+, location: [\d|\.|nil]+)/){|m| "query: [#{m}]"} 
#=> "ronny :create, query: [id: 1, location: nil]" 
+0

这太好了。除了不幸的是我有一个更大的文件,其中位置不一定是最后一个参数。如果它只是查找行的末尾来放置最后一个括号而不是'location“,那么'gsub'看起来会是什么样子? –

0

为了总结name :action,后,一切都变成query: [],尽管参数名:

input.gsub(/(?<=,)((\s*\w+:\s*\w+,?)+)/) do |m| 
    " query: [#{m.strip}]" 
end 
相关问题