Я не могу написать шаблон регулярного выраженияРегулярные выражения. Получить поля из строки
строка:
25,4.6,4%,32,"text1","text2, text3","text4,,t"
результат массива:
25 |
4.6 |
4% |
32 |
"text1" |
"text2, text3" |
"text4,,t" |
Я не могу написать шаблон регулярного выраженияРегулярные выражения. Получить поля из строки
строка:
25,4.6,4%,32,"text1","text2, text3","text4,,t"
результат массива:
25 |
4.6 |
4% |
32 |
"text1" |
"text2, text3" |
"text4,,t" |
RegEx не путь с этим, потому что это ISN» t, предназначенного для корректной обработки строк с котировкой (или балансировки параллелизма).
Однако, похоже, что ваши данные CSV. Если это так, .NET имеет TextFieldParser, который анализирует CSV (включая кавычки).
Вам необходимо добавить ссылку на Microsoft.VisualBasic
в свой проект, чтобы использовать это.
Посмотрите на this SO question для примера, используя C# и цитируемые значения.
Я бы не использовал регулярное выражение (или 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
Регулярные выражения не помогут здесь, как вы имеете дело с цитируемыми строки, вам нужно будет написать анализатор состояния-машины. – Dai
Я ответил на аналогичный вопрос здесь: http://stackoverflow.com/questions/4403194/split-using-delimiter-except-when-delimiter-is-escaped – juharr
[Прекратить перематывать собственный CSV-парсер] (http: // secretgeek .net/csv_trouble) –