Я использую регулярное выражение для анализа CSV-подобного файла. Я новичок в регулярных выражениях, и, хотя он работает, он замедляется, когда есть много полей, и одно из полей содержит очень длинное значение. Как я могу его оптимизировать?CSV-синтаксический анализ регулярных выражений
CSV-я должен разобрать имеет следующий аромат:
- Все поля являются строки, заключенные в кавычки, разделенных запятыми
- Котировки внутри полей экранируются в виде двух последовательных котировок
- Существует непредсказуемый мусор в начале некоторых строк, которые должны быть проигнорированы (до сих пор он не содержал котировок, к счастью)
- Возможно использование полей нули и линий новой строки в полях
Я работаю с VB.NET. Я использую следующее регулярное выражение:
(^(?!").+?|^(?="))(?<Entry>"(",|(.*?)"(?<!((?!").("")+)),))*(?<LastEntry>"("$|(.*?)"(?<!((?!").("")+))$))
Я обрабатывать переводы строк путем подачи StreamReader.ReadLine в переменную строки, пока регулярное выражение не удается, заменив строку с пробелом (это хорошо для моих целей). Затем я извлекаю содержимое поля с помощью Match.Groups («Entry»). Captures and Match.Groups («LastEntry»).
Я полагаю, что удар по производительности исходит из взгляда на скрытые кавычки. Есть ли способ лучше?
Спасибо за любые идеи!
вы можете просто создать простой анализатор, который (а) способ быстрее, чем любое регулярное выражение решения, (б) более удобного для чтения, (с) более отладочным. – Joey