随机gsub字符串n次

时间:2012-04-07 10:20:41

标签: ruby gsub

如何在Ruby中随机替换子串,n次?

例如,我有一个文字:

  

foo foo foo foo bar bar foo bar foo bar

我想在上面的字符串的任何部分用 boo 替换两个随机 foos

这些是可能的结果:

  1. foo foo boo foo bar bar foo bar boo bar
  2. boo foo foo foo bar bar boo bar foo bar
  3. foo boo foo boo bar bar foo bar foo bar
  4. 等。

3 个答案:

答案 0 :(得分:3)

str = "foo foo foo foo bar bar foo bar foo bar"
num = 2
# get an array of all foo's; replace 2 foos with boo; shuffle the array.
ar = (["boo"]*num + str.scan(/foo/)[num..-1]).shuffle
# replace each foo with the next element of the array.
str.gsub(/foo/){ ar.pop }

答案 1 :(得分:0)

您可以使用string.index("substring")找到要替换的所有子字符串。您将获得子字符串的第一个字符的索引。

然后你可以使用这个索引之后的子字符串来查找你要替换的字符串的下一个匹配项等等。

存储要替换的子字符串的所有索引,并使用随机数来定义应替换哪些索引。

答案 2 :(得分:0)

最短的是:

str.gsub(/foo/){|v| rand(2) == 0 ? 'boo' : v}