Страница 271 из Friedl's Мастеринг регулярных выражений имеет регулярное выражение для извлечения возможно заключенных в кавычки полей CSV, но требует немного постобработки:
>>> re.findall('(?:^|,)(?:"((?:[^"]|"")*)"|([^",]*))', '"a,b,c",d,e,f')
[('a,b,c', ''), ('', 'd'), ('', 'e'), ('', 'f')]
>>> re.findall('(?:^|,)(?:"((?:[^"]|"")*)"|([^",]*))', '"a,b,c",d,,f')
[('a,b,c', ''), ('', 'd'), ('', ''), ('', 'f')]
Тот же шаблон с подробным флагом:
csv = re.compile(r"""
(?:^|,)
(?: # now match either a double-quoted field
# (inside, paired double quotes are allowed)...
" # (double-quoted field's opening quote)
( (?: [^"] | "" )* )
" # (double-quoted field's closing quote)
|
# ...or some non-quote/non-comma text...
( [^",]* )
)""", re.X)