Имя: Пароль:
1C
1С v8
По RegExp подскажите
0 Garykom
 
гуру
01.09.14
12:30
В продолжение темы моей Алгоритм нахождения подстрок в строке

Было предложено решать задачу через наборы шаблонов.

Знаю регулярные выражения чуть лучше чем никак, тогда как к примеру в:
1-я строка: кольцо арт.111 17,5 585 3,5 гр. фианит
2-я строка: 222 кольцо ag925 18 4,0 гранат
3-я строка: кольцо 333 (925) 5,4 гр куб циркония
4-я строка: 444 кольцо 17 585AU 5,0 агат
5-я строка: серьги арт.555 18,5 750 3,9 гр. фианит

выделить с помощью RegExp артикул в каждой строке?

Допустим что 1,3 и 5 строка это один документ и нужен для них один шаблон
1 _fvadim
 
01.09.14
14:44
раз уж я ратовал за регэкспы, накидал шаблон для первой и последней строки
(.+) арт.(\d+).+(585|925|750) ([\d,]+) гр. (.+)

расшифровываю

(.+) арт. - выдираем всё с начала строки до текста " арт." - это будет название
(\d+) - следом идут цифры от одной до много - их отдельно, это будет артикул
.+(585|925|750) - потом всякий мусор и следом или 585 или 925 или 750 - это будет проба
([\d,]+) - циферки и запятые больше одной штуки, это будет вес
гр. (.+) - всё, что после "гр. " - описание или что-то там такое.

кратко:
.  - любой сивол
\d - цифра
+  - повторять предыдущий от 1 до бесконечности
[] - набор символов, т.е. [\d,] - цифры и запятые

то, что в скобках вернется в отдельными значениями (submatches)
2 13_Mult
 
01.09.14
14:56
3 13_Mult
 
01.09.14
14:57
4 13_Mult
 
01.09.14
15:00
5 orefkov
 
01.09.14
15:03
(1)
В регэкспах '.' - означает любой символ.
Если нужно найти саму точку, то ее следует экранировать слэшем:
арт\.
6 _fvadim
 
01.09.14
15:04
для тренировки ещё
http://regex101.com/
покрасивее и расписывает по сабмэтчам :)
7 vhl
 
01.09.14
15:09
(0) А ты сам то можешь выделить артикул?
кольцо 333 (925) 5,4 гр куб циркония. Что тут "артикул" ?
8 nicesc
 
01.09.14
15:10
Если артикул числовой и длинной 3 символа, то так:
[0-9]{3}

(1) Артикул может быть = №пробы, такой вариант будет отрабатывать не корректно
9 Garykom
 
гуру
01.09.14
16:06
(7)(8) в данном случае артикул 333, но он не обязательно числовой вообще может любой быть, любой длина и в том числе включать в себя пробелы и прочее
10 Garykom
 
гуру
01.09.14
16:12
(1) гм потестил в (6) интересненько ))

про "то, что в скобках вернется в отдельными значениями (submatches)" вообще раньше не знал (( думал только одно значение может RegExp возвращать

вообщем да можно через регулярки задачу решить, теперь бы еще какой то простой способ их построения придумать, чтобы они каким то образом складывались между собой - т.е. юзер делает разделение на строках и прога сама допиливала шаблоны ))
11 vhl
 
01.09.14
16:16
(9) Почему 333? Почему не 925?
"кольцо 585 (925) 5,4 гр куб циркония" - где артикул?
12 Garykom
 
гуру
01.09.14
16:42
(11) в данном случае надо смотреть другие строки и(или) отношение веса и цены изделия ))

т.е. обычно в одной накладной или золото или серебро, вперемешку редко

ну и цена за грамм для серебра много меньше чем для золота обычно - но это кстати не факт (( есть такая Элька (ELLE производитель) что цены на это серебро повыше чем на золото, типа работа дороже металла