Имя: Пароль:
1C
1С v8
Регулярное выражение в 1с
0 НатГолубева777
 
25.03.20
11:56
Здравствуйте. Помогите, пожалуйста, составить регулярку на 2 выходные строки. Если есть кто то на форуме знающие.
Исходная строка-Артикул: 097. Комплект постельного белья (КПБ) из сатина (Д) "Фантазия"(1,5 спальный (2 наволочки))
1-я выходная Артикул: 097. Комплект постельного белья (КПБ) из сатина (Д) "Фантазия"
2-я выходная 1,5 спальный (2 наволочки)
1 НатГолубева777
 
25.03.20
11:59
Все то что доходит до первой скобки -идет 1-я выходная строка.

И то что идет после 1-ой открывающей скобкой и до последней закрывающей скобки будет 2 выходная строка
2 НатГолубева777
 
25.03.20
11:59
Наврала не так
час перепишу
3 НатГолубева777
 
25.03.20
12:01
Все что идет до последней кавычки в том числе последняя кавычка - это первая выходная строка.
Все то что идет после последней кавычки и без первой и последней скобки -это вторая вых. строка
4 НатГолубева777
 
25.03.20
12:26
опытных нет?
5 fisher
 
25.03.20
12:32
Опытных бездельников нет.
А регулярка тут не нужна.
6 piter3
 
25.03.20
12:32
есть,а деньги будут?)
7 sitex
 
naïve
25.03.20
12:33
(3) т.е. хотите сказать что кавычки у вас везде в справочнике?
8 НатГолубева777
 
25.03.20
12:35
да - номенклатура вводится по этому принципу
9 fisher
 
25.03.20
12:36
Даже если умеешь писать регулярки - нужно три раза подумать, стоит ли их использовать.
А если не умеешь - то используя чужие регулярки ты стреляешь себе по ногам.
10 НатГолубева777
 
25.03.20
12:38
а по другому выделить строку на две строки не получается
11 НатГолубева777
 
25.03.20
12:39
раньше я хорошо составляла регулярки... просто сто лет не использовала его... подзабыла... и тем более делала регулярки в php
12 fisher
 
25.03.20
12:42
(10) Напрягись, наморщи мозг :) Здесь простой парсинг. Уровень сложности - школьная задачка по информатике.
(11) В php регулярки часто использовали для парсинга страниц не от большого ума. Просто как самый доступный способ. Грамотное их применение должно быть очень локальным и максимально застрахованным от сайд-эффектов. Грамотные разрабы тэги им не парсят.
13 fisher
 
25.03.20
12:45
Не, для сабжа регулярки вполне подходят. Если бы они были встроены в платформу. А так - не стоит без особой необходимости внешние зависимости плодить. Тут особой вроде нет.
А если сама сейчас не напишешь, то завтра сама не сможешь ее и допилить.
14 080808Ник
 
25.03.20
12:53
(0) формат всегда такой - строка (строка(строка))?
15 НатГолубева777
 
25.03.20
12:58
да
16 НатГолубева777
 
25.03.20
12:59
и кавычка последняя всегда по формату- строка" (строка(строка))
17 080808Ник
 
25.03.20
13:02
Если Так то как то
Стр = СокрлП(ИсходнаяСтрока);
Счетчик = СтрДлина(Стр);
НомерРазделителя = 0;
Пока Счетчик > 0 Цикл
Если Сред(Стр, Счетчик, 1) = "(" Тогда
Если НомерРазделителя = 0 Тогда
НомерРазделителя = Счетчик;
Иначе
НомерРазделителя = Счетчик;
Прервать;
КонецЕсли;
КонецЦикла;
Стр1 = Сред(Стр,1,НомерРазделителя -1);
Стр2 = Сред(Стр,НомерРазделителя);
18 080808Ник
 
25.03.20
13:03
как то так. но писал на коленке ошибки будут.
19 sitex
 
naïve
25.03.20
13:03
(18) > (9)
20 080808Ник
 
25.03.20
13:03
кстати да - первый косяк: КонецЕсли;
КонецЦикла;  между ними Счетчик = Счетчик -1;
21 080808Ник
 
25.03.20
13:06
(19) я же не настаиваю и регулярки писать не умею((( Одно радует - нет их в 1с.
22 НатГолубева777
 
25.03.20
13:08
СПАСИБО ... Час Попробую
23 acht
 
25.03.20
13:13
(17) Там, говорят, метод СтрНайти завезли. Врут?
24 080808Ник
 
25.03.20
13:14
(23) врут безбожно.
25 080808Ник
 
25.03.20
13:16
НомерРазделителя = СтрНайти(Стр,"(",направлениепоиска.СКонца,,2);
Стр1 = Сред(Стр,1,НомерРазделителя -1);
Стр2 = Сред(Стр,НомерРазделителя);
26 080808Ник
 
25.03.20
13:17
Давно не использовал СТрНайти. Не знал что ее так проапгрейдили)))
27 НатГолубева777
 
25.03.20
13:19
УРРРА сработало.....
28 080808Ник
 
25.03.20
13:23
(27) через стрнайти?
29 НатГолубева777
 
25.03.20
13:25
Без без него пока... час попробую через стр найти
30 МихаилМ
 
25.03.20
13:31
у нас новая мисти.
31 080808Ник
 
25.03.20
13:57
(29) ну что там?
32 fisher
 
25.03.20
14:02
Но если таки хочется вспомнить регулярки, то
Если работать с "группами захвата", то самый простой вариант
(.*")\((.*)\)
Тут две группы, возвращающие то что надо
Если отдельными регулярками без "групп захвата", то
1) .*" это все с начала строки до последних кавычек включительно
2) (?<="\().*(?=\)) это все что в скобках после последних кавычек (без самих скобок)
Тестил на regex101.com (у регулярок есть разные диалекты)
33 fisher
 
25.03.20
14:08
Не. Это только если скобка идет сразу после кавычек. Беда с этими регулярками :)
34 Ц_У
 
25.03.20
14:16
Хватит валять ваньку
МассивСтрок = СтрРазделить("""") вернет массив из 3 строк
1. Артикул: 097. Комплект постельного белья (КПБ) из сатина (Д)
2. Фантазия
3. (1,5 спальный (2 наволочки))
35 Ц_У
 
25.03.20
14:23
Программист всегда исправляет последнюю ошибку.