split string at commas respecting quotes when string not in csv format
Tim Chase
python.list at tim.thechases.com
Thu Mar 26 17:32:45 EDT 2009
R. David Murray wrote:
> Tim Chase <python.list at tim.thechases.com> wrote:
>> r = re.compile(r"""
>> (\w+)
>> \s*=\s*(
>> "(?:[^"]*)"
>> |
>> [^,]+
>> )
>> """, re.VERBOSE)
>> results = [
>> (m.group(1), m.group(2).strip('"'))
>> for m in r.finditer(s)
>> ]
>
> Thank you thank you. I owe you a dinner if we are ever in the
> same town (are you at Pycon?).
Attended PyCon '07 here in Dallas (my back yard), but didn't make
'08 or '09
Grant Edwards wrote:
> We'll wait until you need to modify that and then ask if you're
> still grateful. ;)
>
> "There once was a programmer who had a problem..."
Indeed...I should have commented it a little :)
r = re.compile(r"""
(\w+) # the variable name
\s*=\s* # the equals with optional ws around it
( # grab a group of either
"(?:[^"]*)" # double-quotes around non-quoted stuff
| # or
[^,]+ # stuff that's not a comma
) # end of the value-grab
""", re.VERBOSE)
One of the benefits of re.VERBOSE allows making them a little
less opaque. Unfortunately this version (the non-named-tagged
version) includes the surrounding quotes in the second
capture-group, so the list-comprehension has to strip off the
surrounding quotes.
-tkc
More information about the Python-list
mailing list