0

私は次のようなハッシュを持っています:

{:name => 'foo', :country => 'bar', :age => 22}

私も次のような文字列を持っています

Hello ##name##, you are from ##country## and your age is ##age##. I like ##country## 

上記のハッシュを使用して、この文字列を解析し、タグを対応する値に置き換えます。したがって、解析後、文字列は次のようになります。

Hello foo, you are from bar and your age is 22. I like bar

正規表現を使用して解析することをお勧めしますか?その場合、ハッシュに5つの値があるとすると、文字列を5回トラバースし、そのたびに1つのタグを解析する必要があります。それは良い解決策ではないと思います。より良い解決策はありますか?

4

3 に答える 3

3

問題に対する私の解決策は次のとおりです。

h = {:name => 'foo', :country => 'bar', :age => 22}
s = "Hello ##name##, you are from ##country## and your age is ##age##. I like ##country##}"
s.gsub!(/##([a-zA-Z]*)##/) {|not_needed| h[$1.to_sym]}

通常、正規表現を使用して単一のパスを作成し、必要と思われる置換を行います。

于 2012-12-13T09:18:43.803 に答える
0

ブロックで String#gsub を使用できます。

    h = {:name => 'foo', :country => 'bar', :age => 22}
    s = 'Hello ##name##, you are from ##country## and your age is ##age##. I like ##country##'
    s.gsub(/##(.+?)##/) { |match| h[$1.to_sym] }
于 2012-12-13T09:25:05.947 に答える
0

使用している ruby​​ のバージョンに応じて解決策があるようです。1.9.2 の場合、ここに示すハッシュを使用できます: https://stackoverflow.com/a/8132638/1572626

ただし、質問は一般的に似ているので、他のコメントも読んでください: Ruby複数文字列置換

于 2012-12-13T09:16:38.717 に答える