Значит, здесь есть много сообщений, которые напоминают, а не катят мой собственный синтаксический анализатор csv. Я должен использовать либо VB.Net TextFiledParser.RegEx - Parse Csv Text
Я попробовал, но, пожалуйста, скажите мне, если я ошибаюсь, он будет разбирать на основе одного делиметра.
Итак, если у меня есть поле адреса «Flat 1, StackOverflow House, London», я получаю три поля. К сожалению, это не то, что я хочу. Мне нужно, чтобы все в данной ячейке оставалось одним элементом в массиве.
Так что я начал писать свой собственный RegEx следующим образом:
var testString = @"""Test 1st string""" + "," + @"""Flat 1, StackOverflow House, London, England, The Earth""" + "," + "123456";
var matches = Regex.Matches(chars, @"""([^""\\])*?(?:\\.[^""\\]*)*?""");
var numbers = Regex.Matches(chars, @"\d+$");//only numbers
Assert.That(results.Count(), Is.EqualTo(3));
Assert.That(secondMatch.Count, Is.EqualTo(1));
Первое утверждение не как строка «123456» не возвращается. Выражение возвращает только «Test 1st string» и «Flat 1, StackOverflow House, London, England, The Earth»
Я хочу, чтобы регулярное выражение возвращало все, что указано \ экранировано, и цифры.
Я не контролирую данные, но цифры строк будут указаны как \ экранированные, а числа не будут.
Я очень благодарен за помощь, поскольку я собираюсь по кругу попробовать сторонние библиотеки без особого успеха.
Излишне говорить, что string.split не работает в случае адресов, а http://www.filehelpers.com/, похоже, не учитывает такие примеры.
Использование регулярных выражений для разбора CSV действительно очень грязный, особенно если вы не контролируете свой вход. Поэтому, если вы не можете гарантировать, что в строках не будет никаких скрытых кавычек, вам будет очень сложно получить регулярное выражение, чтобы сделать эту работу надежно. –