2014-09-23 3 views
-1

Я не могу написать шаблон регулярного выраженияРегулярные выражения. Получить поля из строки

строка:

25,4.6,4%,32,"text1","text2, text3","text4,,t" 

результат массива:

25 | 
4.6 | 
4% | 
32 | 
"text1" | 
"text2, text3" | 
"text4,,t" | 
+0

Регулярные выражения не помогут здесь, как вы имеете дело с цитируемыми строки, вам нужно будет написать анализатор состояния-машины. – Dai

+0

Я ответил на аналогичный вопрос здесь: http://stackoverflow.com/questions/4403194/split-using-delimiter-except-when-delimiter-is-escaped – juharr

+2

[Прекратить перематывать собственный CSV-парсер] (http: // secretgeek .net/csv_trouble) –

ответ

0

RegEx не путь с этим, потому что это ISN» t, предназначенного для корректной обработки строк с котировкой (или балансировки параллелизма).

Однако, похоже, что ваши данные CSV. Если это так, .NET имеет TextFieldParser, который анализирует CSV (включая кавычки).

Вам необходимо добавить ссылку на Microsoft.VisualBasic в свой проект, чтобы использовать это.

Посмотрите на this SO question для примера, используя C# и цитируемые значения.

1

Я бы не использовал регулярное выражение (или String.Split) для анализа CSV, а доступный csv-парсер. TextFieldParser является единственным парсером, который уже встроен в .NET. Вы можете использовать его также в C#:

string csv = "25,4.6,4%,32,\"text1\",\"text2, text3\",\"text4,,t\""; 
var reader = new StringReader(csv); 

List<string[]> allLineFields = new List<string[]>(); 
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader)) 
{ 
    parser.Delimiters = new string[] { "," }; 
    parser.TrimWhiteSpace = true; 
    parser.HasFieldsEnclosedInQuotes = true; // <--- !!! 
    string[] fields; 
    while ((fields = parser.ReadFields()) != null) 
    { 
     allLineFields.Add(fields); 
    } 
} 
foreach (string[] arr in allLineFields) 
    Console.WriteLine(string.Join("|", arr)); 

Выход: 25|4.6|4%|32|text1|text2, text3|text4,,t

Конечно, есть другие доступные парсеры, как это: A Fast CSV Reader

Смежные вопросы