2012-04-07 3 views
2

Ruby에서 부분 문자열을 정확히 n 번 바꿀 수있는 방법은 무엇입니까? 예를 들어임의의 gsub 문자열 n 번

, 나는 텍스트가 :

foo는 foo는 foo는 foo는 바 바 foo는 바 foo는 바

I 교체 할

이 개 임의 , FOOS 어떤 부분에서 우우와 위의 문자열의.

  1. foo는 foo는 야유 foo는 바 바 foo는 바 야유 바
  2. 야유 foo는 foo는 foo는 바 바 야유 바 foo는 바
  3. foo는 야유 foo는 야유 바 바 foo는 막대 :

    은 가능한 결과입니다 당신은 당신이 string.index("substring")로 교체 할 문자열의 모든 항목을 찾을 수 있습니다

답변

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 } 
+0

+1. – dbenhur

+0

thx, 나에게 더 좋은 해결책! :) – enRai

0

foo는 바

  • 등. 하위 문자열의 첫 번째 문자 인덱스를 가져옵니다.

    그런 다음이 인덱스 다음에 하위 문자열을 사용하여 바꿀 문자열의 다음 항목을 찾을 수 있습니다.

    바꾸려는 하위 문자열이있는 모든 인덱스를 저장하고 임의의 숫자를 사용하여 교체 할 인덱스를 정의합니다.

  • 0

    최단 하나는 : 간결하고 정확한 양 줘서

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

    이것은 확률 론적으로 'foo'의 2 분의 2 'foo' – dbenhur