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