Стыдно, конечно, так нагло просить уважаемое сообщество, но я не имею огромного опыта в регулярках. Ежели кто забредет ГУРУ в регулярке и ему это не доставит особых хлопот буду очень признателен.
Есть строка (несколько килобайт) в котрой последовательно идут описания товаров.
Описание товара имеет вид такой (3 товара)
"вот тут чтото про товар", "и тут тоже", 2, 45, "а вот тут, вот так, и эдак",
"вот тут чтото про товар", "и тут тоже", 3, 41, "а вот тут, вот так, и эдак",
"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак",
т.е. разделение запятыми не учитывать тех запятых которые в кавычках.
Как мне такую строку разбить на массив строк типа
"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак"
Количество элементов характеризирующих товар четко определено, в примере выше их 5.
Здравствуйте, Пельмешко, Вы писали:
П>Здравствуйте, csharpworker, Вы писали:
C>>"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак",
П>Не хватает информации П>В строковых литералах могут встретиться ", как Вы их эскейпите?
Нет кавычки только так:
"вот тут чтото про товар"
Здравствуйте, csharpworker, Вы писали:
C>Стыдно, конечно, так нагло просить уважаемое сообщество, но я не имею огромного опыта в регулярках. Ежели кто забредет ГУРУ в регулярке и ему это не доставит особых хлопот буду очень признателен. C>Есть строка (несколько килобайт) в котрой последовательно идут описания товаров. C>Описание товара имеет вид такой (3 товара) C>"вот тут чтото про товар", "и тут тоже", 2, 45, "а вот тут, вот так, и эдак", C>"вот тут чтото про товар", "и тут тоже", 3, 41, "а вот тут, вот так, и эдак", C>"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак",
C>т.е. разделение запятыми не учитывать тех запятых которые в кавычках.
C>Как мне такую строку разбить на массив строк типа C>"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак"
C>Количество элементов характеризирующих товар четко определено, в примере выше их 5.
Это ж csv обычный. куча парсеров к нему есть- без регулярный выражений все разбирается.
Здравствуйте, csharpworker, Вы писали:
C>Как мне такую строку разбить на массив строк типа
Как-то так, только разделитель поменять на "," и лишнее убрать:
public static class BlaBlaUtil
{
private static string separator = ";";
private static string pattern = string.Format(@"{0}(?=(?:[^""]*""[^""]*"")*(?![^""]*""))", separator);
public static List<BlaBlaItem> LoadFromCsv(string fileName)
{
if (!File.Exists(fileName))
throw new FileNotFoundException("Файл не найден", fileName);
var result = new List<BlaBlaItem>();
var line = 0; // считаем строки, для вменяемого сообщения об ошибке в строкеusing (StreamReader reader = new StreamReader(fileName, Encoding.GetEncoding(1251)))
while (!reader.EndOfStream)
{
line++;
var s = reader.ReadLine();
// Пропускаем первую строку с заголовкамиif (line == 1)
continue;
//string[] parts = Regex.Split(s, pattern);
var item = new BlaBlaItem();
item.bla1 = parts[0];
item.bla2 = int.Parse(parts[1]);
...
result.Add(item);
}
return result;
}
Здравствуйте, csharpworker, Вы писали:
C>Стыдно, конечно, так нагло просить уважаемое сообщество, но я не имею огромного опыта в регулярках. Ежели кто забредет ГУРУ в регулярке и ему это не доставит особых хлопот буду очень признателен. C>Есть строка (несколько килобайт) в котрой последовательно идут описания товаров. C>Описание товара имеет вид такой (3 товара) C>"вот тут чтото про товар", "и тут тоже", 2, 45, "а вот тут, вот так, и эдак", C>"вот тут чтото про товар", "и тут тоже", 3, 41, "а вот тут, вот так, и эдак", C>"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак",
C>т.е. разделение запятыми не учитывать тех запятых которые в кавычках.
C>Как мне такую строку разбить на массив строк типа C>"вот тут чтото про товар", "и тут тоже", 5, 45, "а вот тут, вот так, и эдак"
C>Количество элементов характеризирующих товар четко определено, в примере выше их 5.
C>Заранее спасибо!
string input = "\"вот тут чтото про товар\", \"и тут тоже\", 2, 45, \"а вот тут, вот так, и эдак\",";
string pattern = @"(^|,)[^"",]*(""[^""]+""|[^,""]+)";
for(Match m = Regex.Match(input,pattern ); m.Groups.Count == 3;m = m.NextMatch())
{
Group g = m.Groups[2];
// do your work on g
}
C> string input = "\"вот тут чтото про товар\", \"и тут тоже\", 2, 45, \"а вот тут, вот так, и эдак\",";
C> //string pattern = @"(^|,)[^"",]*(""[^""]+""|[^,""]+)";string pattern = @"(^|,)\s*(""[^""]+""|[^,""]+)";
C> for(Match m = Regex.Match(input,pattern ); m.Groups.Count == 3;m = m.NextMatch())
C> {
C> Group g = m.Groups[2];
C> // do your work on g
C> }
C>
Здравствуйте, csharpworker, Вы писали:
C>Здравствуйте, Пельмешко, Вы писали:
П>>В строковых литералах могут встретиться ", как Вы их эскейпите?
C>Таки да! Встретились! C>И как быть? Они идут ввиде "" — две двойных кавычки.