From: Morton Goldberg Date: 2007-07-20T14:01:54+09:00 Subject: Re: Is there a replacement for sub? On Jul 19, 2007, at 11:00 PM, Michael W. Ryder wrote: > I was trying to come up with a way to remove x instances of a > character from a string and came up with a problem. If I enter: > > a = "a b c d e f" > for i in 1..3 > a = a.sub!(' ', '') > end > puts a ==> returns 'abcd e f' which is correct. > > But if I enter: > > a = "a b c d e f" > for i in 1..10 > a = a.sub!(' ', '') > end > puts a ==> returns error.rb:3: private method `sub!' called for > nil:NilClass (NoMethodError, and a is now nil. > > What I am looking for is a way to remove the first n instances of a > blank from the string without wiping out the string if it does not > contain at least n blanks. I assume there is a way to do this with > regular expressions, but have not found it yet. This is something > an editor I liked, UCEDIT, on the CDC Cyber had in the 70's. How about this? n = 3 "a b c d e f".sub(/(\S\s){#{n}}/) { |m| m.delete(" ") } # => "abcd e f" n = 10 "a b c d e f".sub(/(\S\s){#{n}}/) { |m| m.delete(" ") } # => "a b c d e f" Regards, Morton