From: Alex LeDonne Date: 2007-11-23T00:27:40+09:00 Subject: Re: help needed using a regex .sub On Nov 22, 2007 6:33 AM, Peter Vanderhaden wrote: > I'm trying to insert a NULL between the first pair of commas in the line > below if it's not already there. > > Before: PWCLLP-243-00000002,,Images\1\pwcllp_243_00000002.tif,,,, > > After: PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,,,, > > I want to replace only the first instance of ,, on the line with ,NULL, > > I can do that with: @record.sub!(',,',',NULL,') > > The problem is if the record already has NULL between those 2 commas, > I'd get: > > PWCLLP-243-00000002,NULL,Images\1\pwcllp_243_00000002.tif,NULL,,, > > I tried this: @record.sub!('\[[:digit:]],,',',NULL,') > > I figured that would replace the first instance of a digit followed by 2 > commas, but it doesn't work. I'm assuming my syntax is incorrect, but > I've tried all variations I can think of. Anyone out there have any > ideas? I'd be very grateful! > PV You might want to use a CSV library, like FasterCSV. But if you don't want that overhead and really want to use a regex... When you say the "first instance of ,,", do you really mean "only if the first comma on the line is immediately followed by another comma"? @record.sub!(/^([^,]*),,/, '\1,NULL,') That regex is: Start at the beginning of the line, match all the non-comma characters, followed by 2 commas. The replacement is: All the non-comma characters, then ',NULL,' instead of the two commas. -Alex