Я хочу проанализировать входящие CSV-подобные строки данных. Значения разделяются запятыми (и могут быть начальные и конечные пробелы вокруг запятых), и могут быть заключены в кавычки либо с «, либо с». Например, это допустимая строка:
data1, data2 ,"data3'''", 'data4""',,,data5,
но этот искажен:
data1, data2, da"ta3", 'data4',
- кавычки могут начинаться или заканчиваться только пробелами.
Такие искаженные строки следует распознавать - лучше всего было бы как-то пометить искаженное значение в строке, но если регулярное выражение не соответствует всей строке, то это также допустимо.
Я пытаюсь написать регулярное выражение, способное разобрать это, используя match () из findall (), но у каждого отдельного регулярного выражения, с которым я работаю, есть некоторые проблемы с крайними случаями.
Так, может, кто-то с опытом разбора чего-то подобного мог бы помочь мне в этом?
(Или, может быть, это слишком сложно для регулярных выражений, и я должен просто написать функцию)
EDIT1:
csv
модуль здесь не очень полезен:
>>> list(csv.reader(StringIO('''2, "dat,a1", 'dat,a2',''')))
[['2', ' "dat', 'a1"', " 'dat", "a2'", '']]
>>> list(csv.reader(StringIO('''2,"dat,a1",'dat,a2',''')))
[['2', 'dat,a1', "'dat", "a2'", '']]
- разве это можно настроить?
РЕДАКТИРОВАТЬ 2: Несколько языковых изменений - я надеюсь, что теперь это более правильный английский
EDIT3: Спасибо за все ответы, теперь я почти уверен, что регулярное выражение здесь не очень хорошая идея, поскольку (1) охват всех граничных случаев может быть сложным (2) вывод записи не является регулярным. Написав это, я решил проверить упомянутый pyparsing и либо использовать его, либо написать собственный анализатор, похожий на FSM.