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 次,并且每次解析一个标签。我不认为这是一个好的解决方案。有没有更好的解决方案?

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

看起来有一个解决方案取决于您使用的 ruby​​ 版本。对于 1.9.2,您可以使用哈希,如下所示:https ://stackoverflow.com/a/8132638/1572626

不过,这个问题通常是相似的,所以也请阅读其他评论:Ruby multiple string replacement

于 2012-12-13T09:16:38.717 回答
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 回答