разделить строку на части

254
05 апреля 2021, 09:50

есть строка например:

"первый","второй","123,67"

надое ее превратить в массив из 3 элементов разделителем должна служить запятая и элементы вытащить из ковычек. Причем запятая внутри кавычек не должна быть разделителем элементов. Т.е должно получиться

  • первый
  • второй
  • 123,67

Разделить строку с разделителем ',' можно просто командой Split(new char{','}), но как поступить с этой же строкой с кавычками? Прогонять ее через цикл как массив байтов не хочется. Есть какое нибудь стандартное решение?

Answer 1

Можно использовать регулярные выражения:

var input =  "\"первый\", \"второй\", \"123,67\"";
var output = new List<string>();
var csvSplit = new Regex("((?<=\")[^\"]*(?=\"(,|$)+)|(?<=,|^)[^,\"]*(?=,|$))", RegexOptions.Compiled);
foreach (Match match in csvSplit.Matches(input)) 
    output.Add(match.Value.TrimStart(','));
foreach (var i in output)
    Console.WriteLine(i);

Результат:

первый 
второй 
123,67

Или как советуют использовать csv парсер, например CSVHelper

Answer 2

Если формат стандартизирован, то можно сделать Split не по символу, а по строке "," - т.к. она и будет разделять элементы. Сперва удалив первую и последнюю кавычку - т.к. они не будут убраны Split'ом

"\"первый\",\"второй\",\"123,67\"".Trim('"').Split(new [] { "\",\"" }, StringSplitOptions.None)
READ ALSO
Переход на выделенную строку в datagridview

Переход на выделенную строку в datagridview

На форме есть Datagridview (с bindingsource) с вертикальной прокруткой (более 200 строк), в котором выделена строка и выполнена прокрутка, те

127
C# как читать текст из .docx через поток

C# как читать текст из .docx через поток

Проблема возникает именно сdocx файлами, файлы

117
Защита памяти от перехвата

Защита памяти от перехвата

Есть серверноеNET приложение

118
delegate / event c#

delegate / event c#

вопрос простой но для профизначит есть event и пара методов для добавления и удаления

118