2

Rubyで正確にn回、部分文字列をランダムに置き換えるにはどうすればよいですか?

たとえば、次のテキストがあります。

foo foo foo foo bar bar foo bar foo bar

上記の文字列の任意の部分で、 2つのランダムなfoobooに置き換えたいと思います。

考えられる結果は次のとおりです。

  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. 等..
4

3 に答える 3

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 }
于 2012-04-07T11:12:55.333 に答える
0

置換する部分文字列のすべての出現箇所を見つけることができますstring.index("substring")。サブストリングの最初の文字のインデックスを取得します。

次に、このインデックスの後の部分文字列を使用して、置換する文字列の次の出現箇所を見つけることができます。

置換する部分文字列が始まるすべてのインデックスを格納し、乱数を使用して、置換するインデックスを定義します。

于 2012-04-07T10:59:31.993 に答える
0

最短のものは次のとおりです。

str.gsub(/foo/){|v| rand(2) == 0 ? 'boo' : v}
于 2012-04-07T15:10:40.487 に答える