如何在Ruby中随机替换子串,n次?
例如,我有一个文字:
foo foo foo foo bar bar foo bar foo bar
我想在上面的字符串的任何部分用 boo 替换两个随机 foos 。
这些是可能的结果:
答案 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}