|
Регулярные выражения обработка строки | ☑ | ||
---|---|---|---|---|
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) Только сейчас удалось добраться попробовать, то что нужно было, премного благодарен! Сам бы не допер...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |