require 'strscan' COMMA = /\A,\Z/ QUOTE = /".*?"/ SCAN_REG = /#{QUOTE}|./ def parse(str) result = [""] scanner = StringScanner.new(str) while match = scanner.scan(SCAN_REG) case match when COMMA; result << "" else ; result.last << match end end result end
p parse(str) #=> ["first", "second\"a,b,c\"second", "third"]