From: Robin Stocker Date: 2006-03-01T22:33:23+09:00 Subject: Re: Regex replacement problem---replace every n-th junk5@microserf.org.uk wrote: > Hi all > > I have the string '1 20 3 400 5 60 7 800 9 0 ' and need to replace > every n-th space in the string with another character. So if n=2 and > the replacement character is '\n', then the above would become > > '1 20\n3 400\n5 60\n7 800\n9 0\n'. > > I'm sure it must be possible (easy, even) to do this with a regex > substitution, but unfortunately I'm no regex ninja. > > So far I have: > > '1 20 3 400 5 60 7 800 9 0 '.sub(/(\d* \d* )/) {|s| s + "\n"} > => "1 20 \n3 400 5 60 7 800 9 0 " > > But how do I get the substitution to be 'repeated'? Changing the regexp > to /(\d* \d*)*/ does not do what I want. > > Also, I'm planning to run this on a large string, so I'd like it to be > efficient if possible. > > Thanks in advance > > C How about: text = '1 20 3 400 5 60 7 800 9 0 ' n = 2 text.gsub!(/(\d+\s+){#{n-1}}(\d+)(\s+)/) { $1 + $2 + "\n" } or completely different: text = '1 20 3 400 5 60 7 800 9 0 ' n = 2 i = 0 text.gsub!(/\s+/) { |s| (i = (i+1) % n).zero? ? "\n" : s } Robin