From: Ross Bamford Date: 2006-03-01T21:36:59+09:00 Subject: Re: Regex replacement problem---replace every n-th On Wed, 2006-03-01 at 21:03 +0900, 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. There's probably a better way to do this, but here's a 'metaregex' idea: str = "1 20 3 400 5 60 7 800 9 0 " # => "1 20 3 400 5 60 7 800 9 0 " n = 2 # => 2 r = Regexp.new('(' + ('\d+\s' * (n - 1)) + '\d+)(\s)') # => /(\d+\s\d+)(\s)/ str.gsub(r) { $1 + rep } # => "1 20\n3 400\n5 60\n7 800\n9 0\n" n = 3 # => 3 r = Regexp.new('(' + ('\d+\s' * (n - 1)) + '\d+)(\s)') # => /(\d+\s\d+\s\d+)(\s)/ str.gsub(r) { $1 + rep } # => "1 20 3\n400 5 60\n7 800 9\n0 " -- Ross Bamford - rosco@roscopeco.REMOVE.co.uk