> That won't work for the general case. I spent about 30 minutes trying > to come up with a reliably non-re way and kept hitting bugs like the > one here. Given that Tony_combine is a function wrapping Tony's logic: > > >>> Tony_combine('This will not work as "more than two words" are > quoted') > ['This', 'will', 'not', 'work', 'as', 'than', 'two', '"more words"', > 'are', 'quoted']
Opps. You're right. This is probably even uglier (can't be bothered tidying it up), but should work in the more general case and does combine them up again: def Tony_combine2(s): combined = [] b = [] in_quotes = False for a in s.split(): if '"' in a and in_quotes: combined.append(a) b.append(" ".join(combined)) combined = [] in_quotes = False continue elif '"' in a and not in_quotes: in_quotes = True if in_quotes: combined.append(a) else: b.append(a) return b >>> Tony_combine('This will not work as "more than two words" are quoted') ['This', 'will', 'not', 'work', 'as', '"more than two words"', 'are', 'quoted'] Writing your own split or using re is definitely nicer, though. =Tony.Meyer _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor