Я хочу анализировать входящие 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'", '']]
- если это не может быть настроено?
EDIT2: несколько изменений языка - я надеюсь, что он станет более актуальным на английском языке
EDIT3: Спасибо за все ответы, теперь я уверен, что регулярное выражение здесь не так хорошо, как (1), охватывающее все случаи краев, может быть сложным (2) вывод записи не является регулярным. Написав это, я решил проверить упомянутый pyparsing и либо использовать его, либо написать собственный FS-подобный парсер.