Мне нужно проанализировать входы строк, где столбцы разделены столбцами, а любое поле, содержащее запятую в данных, заключено в кавычки (разделенные запятыми, идентификаторы в кавычках). Для этого проекта мне нужно удалить кавычки и любые запятые, которые встречаются между парами кавычек. По сути, мне нужно удалить запятые и кавычки, содержащиеся в полях, сохранив запятые, которые используются для разделения полей. Вот небольшой код, который я собрал для обработки простого сценария:
// Sample input 1: This works and covers 99% of the records that I need to parse.
string str1 = "an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,\"This Address Works, Suite 200\",Some City,TN,09876-5432,9795551212x123,XYZ";
str1 = Regex.Replace(str1, "\"([^\"^,]*),([^\"^,]*)\"", "$1$2");
Console.WriteLine(str1);
// Outputs: an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,This Address Works Suite 200,Some City,TN,09876-5432,9795551212x123,XYZ
Хотя этот код работает для большинства моих записей, он не работает, когда поле содержит более одной запятой. Я хотел бы изменить код так, чтобы он удалял каждый экземпляр запятой, содержащейся в столбце, независимо от количества запятых в поле. Я не хочу жестко кодировать только обработку 2 запятых, или 3 запятых, или 25 запятых. Код должен просто удалить все запятые в поле. Ниже приведен пример того, что мой код не обрабатывает должным образом.
// Sample input 2: This doesn't work since there is more than 1 comma between the quotes.
string str2 = "an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,\"i,l,k,e, c,o,m,m,a,s, i,n ,m,y, f,i,e,l,d\",Some City,TN,09876-5432,9795551212x123,XYZ";
str2 = Regex.Replace(str2, "\"([^\"^,]*),([^\"^,]*)\"", "$1$2");
Console.WriteLine(str2);
// Desired output: an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,i like commas in my field,Some City,TN,09876-5432,9795551212x123,XYZ
Как я могу сделать это с помощью регулярных выражений?