Имя: Пароль:
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) Только сейчас удалось добраться попробовать, то что нужно было, премного благодарен! Сам бы не допер...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn