Написал:
(\d+(?=;))|(\d+[.\d]\d+(?=;))|(\d+[.\d]\d+[.\d]\d+(?=;))|("(([^"])|(""))*"(?=;))
Это регулярное выражение разбирает строку CSV-файла с учетом двойных кавычек и ";" которые могут быть в тексте.
Для примера строка:
109541;"Аптечный пункт 3 ; (Украина, ""Светловодск"")";"Аптечный пункт ;"Світловодськ";0;"Украина, Кировоградская обл., г.Светловодск, ул.Павлова Академика, 16, ЦРБ, поликлиника";16542;"3510900000";"СВЕТЛОВОДСК";30;"Аптечный пункт";"";9880;"Каскад ЧП ПКФ (Украина, Светловодск)";"Каскад";"Частное предприятие производственно-коммерческая фирма";"Светловодск";"13757383";4;"";"";0;"";2;"г.";"ул.";364;"Павлова Академика";"16, ЦРБ, поликлиника";"";81962;"АВ154111";31.05.2006;31.05.2011;34467;"Частная";0;0;
Результат разбора:
109541
"Аптечный пункт 3 ; (Украина, ""Светловодск"")"
"Аптечный пункт 3"
""
"27500"
"27500"
2
"подписка"
118289
121
"Кировоградская"
560
"Светловодск"
"Світловодськ"
0
"Украина, Кировоградская обл., г.Светловодск, ул.Павлова Академика, 16, ЦРБ, поликлиника"
16542
"3510900000"
"СВЕТЛОВОДСК"
30
"Аптечный пункт"
""
9880
"Каскад ЧП ПКФ (Украина, Светловодск)"
"Каскад"
"Частное предприятие производственно-коммерческая фирма"
"Светловодск"
"13757383"
4
""
""
0
""
2
"г."
"ул."
364
"Павлова Академика"
"16, ЦРБ, поликлиника"
""
81962
"АВ154111"
31.05.2006
31.05.2011
34467
"Частная"
0
0
Нужно учесть, что для того чтобы взялось последнее значение, нужно к исходной строке добавить в конце символ ";".
Теперь подробнее:
(\d+(?=;)) - это числа без десятичных знаков
(\d+[.\d]\d+(?=;)) - это числа с десятичными знаками
(\d+[.\d]\d+[.\d]\d+(?=;)) - это даты
("(([^"])|(""))*"(?=;)) - это строки