2016-05-17 5 views
0

文字列が与えられ、文字、空白およびハイフンを含めることができます。例:空白またはハイフンで区切られた各文字列のメソッドを実行します。

str1 = "abcdef ghi-jkl" 

私はstr1に各単語に方法methodを実行する(ここでは言葉は、文字のシーケンスがあるそれは、空白および/またはハイフンで区切られています。)。 str1に例えば

method("abcdef")method("ghi")method("jkl")"abcdef* ghi*-jkl*"*各弦法の結果である)が返されます。 method ("abcdef ghi-jkl")は(method("abcdef")method("ghi")method("jkl"))と等しくありません。空白とハイフンは、元の場所に戻されます。

どうすればいいですか?

私の勘違いは、ある種の正規表現方法と組み合わせたメソッドを使用することです。

答えて

3
def the_method(s) 
    "[#{s}]" # just an example 
end 

str1 = "abcdef ghi-jkl" 
str1.gsub(/[^ -]+/) { |match| the_method(match) } 
# or a bit shorter: 
str1.gsub(/[^ -]+/, &method(:the_method)) 
# or a bit faster: 
block = method(:the_method) 
str1.gsub(/[^ -]+/, &block) 

# all of those produce: 
# => "[abcdef] [ghi]-[jkl]" 
+0

これは非常にクールです。私はあなたが 'gsub'にブロックを供給できるかどうか分かりませんでした。ところで、ラムダを使うと、表記法はもっと簡単になります: 'the_lambda = - (s){" [#{s}] "}; str1.gsub(/ [^ - ] + /、&thelambda) ' –

+0

@KeithBennett:私は' the_method'がすでにOPで記述されているメソッドとして存在すると仮定しました。そうでない場合は、ブロックを直接使用できるときにラムダを使用するのは意味がありません。 – Amadan

+0

真。私はエーテルに一般的な示唆として言わなければならないと思う。 ;) –

関連する問題