Имя: Пароль:
1C
1С v8
Регулярные выражения обработка строки
,
0 maestro-72
 
24.07.23
12:50
Делал без регулярки. Исходная строка имеет разделитель ","  но беда в том что есть "","",0.5,"что-то, там то,капец","Производитель"ООО рога и копыта"","" Вот такого вида.
Если брать просто по разделителю и загонять в массив там клеить это выражение разделенное по запятой, вычленять где в двойных ковычках есть доп ковычки. Очень долго обрабатывает строку. В результате надо получить массив со строками независимо от ковычек (т.е. убрать лишние ковычки, числа оставить как строка, и строка с ковычками внутри тоже должна остаться с ковычками но только внутри (Производитель "ООО Рога и копыта") оптимизировал и так и эдак. И вот, как последний шанс увеличить производительность обработки решил обратиться к регулярке, но беда, регулярках не силен, пытался по разному составить рег выражение по примерам из инета, не выходит, потому прошу помощи у зающих. Посоветуйте как быть. Может вопрос выеденного яйца не стоит...
1 mistеr
 
24.07.23
13:21
На входе одна строка или много?
Есть утилиты для перегона CSV в JSON, XLS или что-то еще.
2 maestro-72
 
24.07.23
14:06
(1) Да если бы была одна строка... Несколько десятков таких строк
3 maestro-72
 
24.07.23
14:17
Десятков тысяч строк
4 Timon1405
 
24.07.23
14:18
напишите исходную строку и какой массив подвыражений хотите получить: М[0], М[1] итд
5 Arbuz
 
24.07.23
14:50
(?:^|,)(?=[^"]|(")?)"?((?(1)(?:[^"]|"")*|[^,"]*))"?(?=,|$)
6 Arbuz
 
24.07.23
14:56
+(5) мультистрочная, каждый матч кроме первого будет с ведущей запятой, во второй группе - без ведущей запятой и без обрамляющих кавычек
7 maestro-72
 
24.07.23
14:57
Исходная
"ПоступлениеТМЦ","","","Создано по Реализации №ММ00-028821 от 02.05.2023","","","","","","00-001883","","1","1","1","0","0","","","",42,"","","","","","","","","","Имя контрагента "ООО Копыта","ЮрЛица","0029063595/002901001","","","392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5","392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5","0","","","",0,"","","",""
Массив подстрок
ПоступлениеТМЦ


Создано по Реализации №ММ00-028821 от 02.05.2023





00-001883

1
1
1
0
0



42









Имя контрагента "ООО Копыта"
ЮрЛица
0029063595/002901001


392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5
392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5
0



0
8 maestro-72
 
24.07.23
15:00
(5) Э... надо разобраться
9 Arbuz
 
24.07.23
15:12
(8)  <...> ,"Имя контрагента "ООО Копыта", <...>
Это вот как так может быть? По стандарту должно быть вот так:
<...> ,"Имя контрагента ""ООО Копыта""", <...>
10 maestro-72
 
24.07.23
15:16
(9) в том то и дело, в исходнике получается все что заключено в кавычки не должно разбираться вообще. т.е. есть открывающая ковычка ищем закрывающую текст внутри как был так и остается что бы там нибыло. О как...
Да все бы  было здорово если бы не числа, которые вообще без ковычек
11 maestro-72
 
24.07.23
15:18
(9) ,"Имя контрагента "ООО Копыта"",    - вот так правильно. это я ошибся
12 Смотрящий
 
24.07.23
15:20
(7) При такой структуре строки, три СтрЗаменить, одно СтрРазделить. Странно что у тебя не получается кодом
13 Arbuz
 
24.07.23
15:22
нна ("([^"]*)"|[^,]*)(,|$)
в первой группе будет вся твоя хрень с кавычками, во второй без (но если кавычек в поле совсем не будет, то пусто)
14 Arbuz
 
24.07.23
15:25
(10) и какая же кавычка закрывающая в (9)? расскажи-ка...
15 vbus
 
24.07.23
15:26
s='"ПоступлениеТМЦ","","","Создано по Реализации №ММ00-028821 от 02.05.2023","","","","","","00-001883","","1","1","1","0","0","","","",42,"","","","","","","","","","Имя контрагента "ООО Копыта","ЮрЛица","0029063595/002901001","","","392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5","392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5","0","","","",0,"","","",""'


c=[el.strip('"')+'\n' for el in (s.split('","'))]
print(*c)


ПоступлениеТМЦ


Создано по Реализации №ММ00-028821 от 02.05.2023





00-001883

1
1
1
0
0


,42,








Имя контрагента "ООО Копыта
ЮрЛица
0029063595/002901001


392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5
392036, какая-то обл, Какой-то г, Мудрая ул, дом № 5
0


,0,


с Копытами опечатка, не хватает кавычки, а что не все в кавычках?
16 maestro-72
 
24.07.23
15:56
Вроде про 1с говорим, вот это не понял: c=[el.strip('"')+'\n' for el in (s.split('","'))]
print(*c)
17 Fragster
 
гуру
24.07.23
16:00
(0) использовать adodb text driver для чтения твоего csv и все будет ок, даже если там переводы строки внутри кавычек
18 Fragster
 
гуру
24.07.23
16:00
а учитывая (2) будет ещё и сильно быстрее
19 Fragster
 
гуру
24.07.23
16:01
а если такое постоянно - то можно внешний источник данных добавить прям в конфигурацию
20 maestro-72
 
31.07.23
12:36
(13) Только сейчас удалось добраться попробовать, то что нужно было, премного благодарен! Сам бы не допер...