Извлечь артикулы из текста и разобрать группы совпадения

Учебные задачи

Находим два кода в учебном тексте, выводим позиции и длины, затем читаем буквенную и цифровую группы первого кода.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Все исходные строки заданы прямо в примере; товары, файлы и настройки рабочих конфигураций не нужны.

  2. Выполняйте на сервере учебной базы. Особенно важно для встроенных функций регулярных выражений.


Текст = "Коды: AB-0042, CD-1000.";
Шаблон = "([A-Z]{2})-([0-9]{4})";
ВсеСовпадения = СтрНайтиВсеПоРегулярномуВыражению(Текст, Шаблон);
Для Каждого Совпадение Из ВсеСовпадения Цикл
    Сообщить(СтрШаблон("%1: начало %2, длина %3", Совпадение.Значение, Совпадение.НачальнаяПозиция, Совпадение.Длина));
КонецЦикла;
Первое = СтрНайтиПоРегулярномуВыражению(Текст, Шаблон);
Если Первое.НачальнаяПозиция = 0 Тогда
    ВызватьИсключение "Нет учебного кода в тексте";
КонецЕсли;
Для Каждого Группа Из Первое.ПолучитьГруппы() Цикл
    Если Группа.НачальнаяПозиция > 0 Тогда
        Сообщить(СтрШаблон("Группа: %1; начало %2; длина %3", Группа.Значение, Группа.НачальнаяПозиция, Группа.Длина));
    КонецЕсли;
КонецЦикла;
НеНайдено = СтрНайтиПоРегулярномуВыражению("Без кодов", Шаблон);
Сообщить(НеНайдено.НачальнаяПозиция = 0);

Разбор по шагам

  1. Поиск всех вхождений возвращает массив результатов, а не массив готовых строк.

  2. Свойства результата содержат значение, длину и начальную позицию в исходном тексте с 1.

  3. Круглые скобки в шаблоне создают группы. Обходим массив ПолучитьГруппы без предположения о специальных индексах.

  4. Отсутствие совпадения у одиночного поиска определяется НачальнаяПозиция=0, а не сравнением объекта с Неопределено.

Как проверить результат

  1. Совпадения AB-0042 и CD-1000: длина каждого 7, начала соответственно 7 и 16.

  2. Для первого кода группы содержат AB и 0042; ведущие нули цифровой группы сохранены как текст.

  3. Для Без кодов последняя проверка даёт Истина.

  4. Удалите коды из исходника: массив всех совпадений пуст, а проверка первого явно сообщает об отсутствии.

Ожидаемый результат

Коды извлечены вместе с позициями, а части артикула прочитаны из групп регулярного выражения.

На что обратить внимание

  1. Не преобразуйте цифровую часть артикула в число без контракта: 0042 тогда станет 42.

  2. У необязательной группы может быть НачальнаяПозиция=0; её следует проверить до использования.

  3. Регулярные выражения не заменяют JSON/XML-парсер для структурированных документов.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.