2013-09-10 109 views
0

從數組元素的字符串我有一個這樣的陣列:生成基於模式匹配

inList = ["edge_rabbit", "nsp_edge_rabbit", "services", "syslog", "master_rabbit", "mongod", ...] 

如何可以採取與_rabbit或元件與格式mongo[cds]結束的元件,並且生成一個逗號分隔的字符串如下所示?

"edge_rabbit, nsp_edge_rabbit, master_rabbit" 

回答

2

這是你正在尋找使用String#end_with?Array#select的人嗎?

inList = ["edge_rabbit", "nsp_edge_rabbit", "services", "syslog", "master_rabbit", "mongod"] 
inList.select{|e| e.end_with?('_rabbit')}.join(", ") 
# => "edge_rabbit, nsp_edge_rabbit, master_rabbit" 

inList = ["edge_rabbit", "nsp_edge_rabbit", "services", "syslog", "master_rabbit", "mongod"] 
inList.grep(/_rabbit$/).join(", ") 
# => "edge_rabbit, nsp_edge_rabbit, master_rabbit" 


inList = ["edge_rabbit","_rabbit_ut", "nsp_edge_rabbit", "services", "syslog", "master_rabbit", "mongod","mongos","mongoy"] 
inList.grep(/_rabbit$|^mongo[cds]/).join(", ") 
# => "edge_rabbit, nsp_edge_rabbit, master_rabbit, mongod, mongos" 
+1

我知道這會是如此簡單,我還沒有考慮這個問題。非常感謝您的及時答覆。乾杯!! – MacUsers

+0

在另一個註釋中,是否有可能通過'include'使用模式匹配/正則表達式,比如'inList.include? ()'?例如檢查是否有任何數組元素以'_rabbit'結尾。乾杯!! – MacUsers

+0

@MacUsers不與['#include?'](http://www.ruby-doc.org/core-2.0.0/Array.html#method-i-include-3F)但是有'#grep'你可以做。查看我的更新。 –

1

我會使用一些小的模式:在mongo

in_list.grep(/(?:^mongo)|(?:_rabbit$)/).join(', ') # => "edge_rabbit, nsp_edge_rabbit, master_rabbit, mongod" 

如果有可能有變化與其他尾隨:

in_list = ["edge_rabbit", "nsp_edge_rabbit", "services", "syslog", "master_rabbit", "mongod"] 

in_list.select{ |s| s[/(?:^mongo)|(?:_rabbit$)/] }.join(', ') # => "edge_rabbit, nsp_edge_rabbit, master_rabbit, mongod" 

或者字符besid ES cds,然後使用:

in_list.grep(/(?:^mongo[cds])|(?:_rabbit$)/).join(', ') # => "edge_rabbit, nsp_edge_rabbit, master_rabbit, mongod" 
+0

是的'#grep'的確是個不錯的方法。 –

+0

@ The Tin Man:對Ruby新手非常有用;感謝您的支持!乾杯!! – MacUsers