Правила извлечения значений

Правила извлечения значений позволяют парсить сложные текстовые данные из ячеек и извлекать из них структурированную информацию для заполнения полей товаров. Например, из строки "Дрель Bosch GSB 13 RE (650 Вт, 1.8 кг)" можно извлечь бренд "Bosch", модель "GSB 13 RE", мощность "650" и вес "1.8". Правила применяются после основных маппингов и могут как создавать новые поля, так и перезаписывать существующие. Это то, что очень сильно упростит вам жизнь и позволит решить практически любые вопросы по извлечению данных.

Обратите внимание

В примерах с регулярными выражениями типа Паттерн = r'^[A-Za-z]+-\d+$' само выражение, которое нужно вводить в форму располагается между двумя одинарными кавычками, то есть ^[A-Za-z]+-\d+$

Когда использовать правила извлечения

Бренд и модель находятся в одном столбце с названием

Числовые значения нужно извлечь из текста (например, "4500 руб." → 4500)

Характеристики вписаны в описание товара

Нужно нормализовать единицы измерения (кг, г, фунты → кг)

Данные приходят в нестандартном формате

Требуется заполнить поля на основе части информации из ячейки, например, поставщик пишет в названии товара, что отгрузка кратно 100 шт. и не пишет больше ни где, вы либо извлекаете это правильно, либо постоянно объясняете покупателю, почему купить у вас можно одну штуку, а продать вы можете только 100.

Типы извлечения значений

Тип 1. Точное совпадение

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

Пример: Ячейка содержит "ДА" или "НЕТ". Правило для поля availability: если точно "ДА", то установить True, если точно "НЕТ" - False.

Настройки: Тип извлечения = Точное совпадение, Паттерн = "ДА", Значение для установки = "true"

Тип 2. Частичное совпадение

Используется когда паттерн должен содержаться в значении ячейки. Подходит для категоризации по ключевым словам.

Пример: Ячейка содержит "Профессиональная дрель Bosch", нужно определить бренд. Правило: если в тексте есть "Bosch", установить Бренд = "Bosch".

Настройки: Тип извлечения = Частичное совпадение, Паттерн = "Bosch", Значение для установки = "Bosch"

Тип 3. Регулярное выражение

Используется когда нужно проверить соответствие сложному шаблону. Проверяет, соответствует ли вся строка регулярному выражению.

Пример: Проверка что строка начинается с буквы и содержит только цифры в конце. Правило: Паттерн = r'^[A-Za-z]+-\d+$' (например "AB-12345").

Настройки: Тип извлечения = Регулярное выражение, Паттерн = r'^[A-Za-z]+-\d+$'

Тип 4. Регулярное выражение с извлечением

Самый мощный тип. Извлекает часть строки, соответствующую группе захвата в регулярном выражении. Группа захвата обозначается круглыми скобками ().

Пример: Из строки "Мощность: 650 Вт" извлечь число 650. Правило: Паттерн = r'Мощность:\s*(\d+)'

Настройки: Тип извлечения = Регулярное выражение_с_извлечением, Паттерн = r'Мощность:\s*(\d+)'

Тип 5. Конвертация единиц измерения

Специализированный тип для извлечения числовых значений с автоматической конвертацией в базовые единицы (кг для веса, мм для размеров).

Пример: Из строки "Вес: 1.8 кг" или "Вес: 1800 г" извлечь значение и конвертировать в кг.

Настройки: Тип извлечения = Конвертация единиц измерения, Паттерн = "kg" (или "g", "lb", "oz" и т.д.)

Структура правила извлечения

Каждое правило содержит следующие параметры:

Номер столбца - номер столбца (для CSV/Excel), из которого берется значение

Поле товара - поле товара, в которое сохраняется результат

Паттерн - паттерн для поиска (текст или регулярное выражение)

Тип извлечения - тип извлечения (Точное совпадение, Частичное совпадение, Регулярное выражение, Регулярное выражение_с_извлечением, Конвертация единиц измерения)

Значение по-умолчанию - значение, если ни одно правило не подошло

Значение для установки - фиксированное значение для установки при совпадении (опционально)

Не изменять существующие - не изменять поле, если оно уже заполнено

Примеры для csv/excel

Пример 1. Извлечение бренда из названия товара

Столбец с названием содержит: "Дрель Bosch GSB 13 RE Professional"

Правило:

Столбец источник = 2 (столбец с названием)

Целевое поле = brand

Паттерн = r'\b(Bosch|Makita|DeWalt|Metabo)\b'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = "Unknown"

Не изменять существующие = false

Результат: brand = "Bosch"

Пример 2. Извлечение числового значения цены

Столбец с ценой содержит: "4 500.50 руб." или "6 500,00 руб."

Правило:

Столбец источник = 3 (столбец с ценой)

Целевое поле = price

Паттерн = r'(\d+[.,]?\d*)'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = "0"

Не изменять существующие = false

Результат: price = 4500.50 (автоматически конвертируется в Decimal)

Пример 3. Определение наличия по тексту

Столбец с наличием содержит: "В наличии 15 шт.", "Под заказ", "Нет в наличии"

Правила (последовательные):

Правило 1:

Столбец источник = 4

Целевое поле = availability

Паттерн = r'в наличии|есть|available'

Тип извлечения = Частичное совпадение

Значение для установки = "true"

Значение по-умолчанию = "" (не используется)

Правило 2:

Столбец источник = 4

Целевое поле = availability

Паттерн = r'нет|отсутствует|под заказ'

Тип извлечения = Частичное совпадение

Значение для установки = "false"

Значение по-умолчанию = "false"

Результат: availability = true/false в зависимости от текста

Пример 4. Извлечение остатка из текста

Столбец содержит: "Остаток: 25 шт.", "Склад А: 15, Склад Б: 5"

Правило:

Столбец источник = 5

Целевое поле = stock

Паттерн = r'Остаток:\s*(\d+)'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = "0"

Не изменять существующие = false

Или для суммы со складов:

Паттерн = r'Склад А:\s(\d+).?Склад Б:\s*(\d+)'

Тип извлечения = Регулярное выражение_с_извлечением (извлечет первую группу, нужно несколько правил или комбинирование)

Пример 5. Извлечение веса с конвертацией единиц

Столбец содержит: "Вес: 1.8 кг", "Вес: 1800 г", "Weight: 3.5 lb"

Правило 1 (для кг):

Столбец источник = 6

Целевое поле = weight_kg

Паттерн = r'(\d+[.,]?\d)\sкг'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = ""

Правило 2 (для граммов с конвертацией):

Столбец источник = 6

Целевое поле = weight_kg

Паттерн = r'(\d+[.,]?\d)\s[гg]'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = ""

дополнительно: после извлечения значение преобразуется: граммы / 1000 = кг

Или через конвертацию единиц измерения:

Столбец источник = 6

Целевое поле = weight_kg

Паттерн = "g" (или "kg", "lb")

Тип извлечения = Конвертация единиц измерения

Пример 6. Извлечение размеров из одной ячейки

Столбец содержит: "280x200x150 мм", "280*200*150", "280×200×150"

Правило для длины:

Столбец источник = 7

Целевое поле = length_mm

Паттерн = r'(\d+)x*×x*×'

Тип извлечения = Регулярное выражение_с_извлечением (извлечет первое число 280)

Значение по-умолчанию = ""

Правило для ширины (из той же ячейки):

Столбец источник = 7

Целевое поле = width_mm

Паттерн = r'\d+x*×[x*×]\d+'

Тип извлечения = Регулярное выражение_с_извлечением (извлечет второе число 200)

Правило для высоты:

Столбец источник = 7

Целевое поле = height_mm

Паттерн = r'\d+[x*×]\d+x*×'

Тип извлечения = Регулярное выражение_с_извлечением (извлечет третье число 150)

Пример 7. Категоризация по ключевым словам

Столбец с описанием содержит: "Профессиональный электроинструмент для строительства"

Правила для определения типа товара:

Правило 1 (электроинструмент):

Столбец источник = 8

Целевое поле = тип товара

Паттерн = r'электроинструмент|дрель|перфоратор|шуруповерт'

Тип извлечения = Частичное совпадение

Значение для установки = "Электроинструмент"

Правило 2 (ручной инструмент):

Столбец источник = 8

Целевое поле = тип товара

Паттерн = r'отвертка|молоток|пассатижи|ключ'

Тип извлечения = Частичное совпадение

Значение для установки = "Ручной инструмент"

Правило 3 (расходные материалы):

Столбец источник = 8

Целевое поле = тип товара

Паттерн = r'сверло|диск|полотно|насадка'

Тип извлечения = Частичное совпадение

Значение для установки = "Расходные материалы"

Пример 8. Извлечение страны производителя

Столбец содержит: "Страна: Китай", "Made in Germany", "Производитель: Россия"

Правило:

Столбец источник = 9

Целевое поле = manufacturing_country

Паттерн = r'(?:Страна:|Made in|Производитель:)\s*(\w+)'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = "Не указана"

Пример 9. Извлечение артикула производителя из названия

Столбец содержит: "Дрель Bosch GSB 13 RE (арт. 2607001400)"

Правило:

Столбец источник = 2

Целевое поле = manufacturer_code

Паттерн = r'арт.?\s*(\w+)'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = ""

Не изменять существующие = true (не заменять если уже есть)

Пример 10. Нормализация булевых значений

Столбец содержит разные варианты указания наличия: "да", "yes", "true", "1", "+"

Правило для установки availability = true:

Столбец источник = 4

Целевое поле = availability

Паттерн = r'да|yes|true|1|+'

Тип извлечения = Частичное совпадение

Значение для установки = "true"

Значение по-умолчанию = "false"

Примеры для YML

Пример 11. Извлечение из параметров YML

В YML характеристики в тегах param: <param name="Мощность">650 Вт</param>

Правило YML:

xpath_expression = param[@name="Мощность"]

Целевое поле = description

Паттерн = r'(\d+)\s*Вт'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = ""

Пример 12. Извлечение веса с конвертацией в YML

Тег: <param name="Вес" unit="кг">1.8</param> или <param name="Вес" unit="г">1800</param>

Правило YML с Конвертация единиц измерения:

xpath_expression = param[@name="Вес"]

Целевое поле = weight_kg

Паттерн = "kg" (или "g", "lb" в зависимости от unit)

Тип извлечения = Конвертация единиц измерения

Пример 13. Извлечение из атрибутов YML

Атрибут оффера: <offer id="12345" available="true" group_id="G678">

Правило для извлечения group_id:

xpath_expression = @group_id

Целевое поле = external_id (пользовательское поле)

Паттерн = r'(.+)' (извлечь всё)

Тип извлечения = Регулярное выражение_с_извлечением

Примеры для XML

Пример 14. Извлечение из вложенных тегов XML
XML: <Товар><Характеристики><Мощность>650</Мощность><ЕдИзм>Вт</ЕдИзм></Характеристики></Товар>

Правило XML:

xpath_expression = Характеристики/Мощность

Целевое поле = description

Паттерн = r'(.+)'

Тип извлечения = Регулярное выражение_с_извлечением

Пример 15. Комбинирование нескольких тегов XML

XML: <Вес><Значение>1.8</Значение><Единица>кг</Единица></Вес>

Правило для извлечения веса с учетом единицы измерения:

можно сначала извлечь значение, потом единицу, либо использовать конвертацию единиц измерения

xpath_expression = Вес/Значение

Целевое поле = weight_kg

Паттерн = r'(.+)'

Тип извлечения = Регулярное выражение_с_извлечением

дополнительно: из тега Вес/Единица получить единицу и применить конвертацию

Примеры для JSON

Пример 16. Извлечение из вложенных объектов JSON
JSON: {"specifications": {"power": {"value": 650, "unit": "Вт"}, "weight": {"value": 1.8, "unit": "кг"}}}

Правило JSON для веса:

json_path = $.specifications.weight.value

Целевое поле = weight_kg

Паттерн = r'(.+)'

Тип извлечения = Регулярное выражение_с_извлечением

Значение по-умолчанию = ""

Пример 17. Извлечение из массивов JSON с фильтром

JSON: {"params": [{"name": "Мощность", "value": "650 Вт"}, {"name": "Вес", "value": "1.8 кг"}]}

Правило JSON с фильтром:

json_path = $.params[?(@.name == 'Вес')].value

Целевое поле = weight_kg

Паттерн = r'(\d+[.,]?\d*)'

Тип извлечения = Регулярное выражение_с_извлечением

Последовательность применения правил

Правила извлечения применяются в следующем порядке:

Сначала применяются основные маппинги полей

Затем применяются правила замены текста

Затем применяются правила извлечения значений

В конце применяются правила изменения цен и фильтрации

Это важно учитывать при настройке: если вы хотите извлечь бренд из названия, а потом очистить название от бренда, правила должны идти в правильном порядке.

Использование значения по-умолчанию

Параметр Значение по-умолчанию используется когда ни одно правило не сработало или извлеченное значение пустое. Это гарантирует, что поле всегда будет заполнено каким-то значением.

Примеры значений по-умолчанию:

Для бренда: "Unknown"

Для наличия: "false" (товар отсутствует по умолчанию)

Для цены: "0"

Для страны: "Не указана"

Использования параметра не изменять существующие

Параметр Не изменять существующие = true означает, что правило будет применяться только если целевое поле еще не заполнено. Это полезно для задания значений по умолчанию или для заполнения только пустых полей.

Пример: Есть основной маппинг для бренда из отдельного столбца, но если этот столбец пустой, то извлечь бренд из названия.

Практические примеры

Пример 18. Полный разбор сложной строки товара

Строка: "Bosch GSB 13 RE, мощность 650 Вт, вес 1.8 кг, в комплекте кейс, арт. 2607001400"

Правило 1 (извлечение бренда):

Паттерн = r'^(Bosch|Makita|DeWalt)'

Целевое поле = brand

Тип извлечения = Регулярное выражение_с_извлечением

Правило 2 (извлечение модели):

Паттерн = r'[A-Z]+\s+\d+\s+[A-Z]+' (GSB 13 RE)

Целевое поле = model

Тип извлечения = Регулярное выражение_с_извлечением

Правило 3 (извлечение мощности):

Паттерн = r'мощность\s(\d+)\sВт'

Целевое поле = description (добавляем в описание)

Тип извлечения = Регулярное выражение_с_извлечением

Правило 4 (извлечение веса):

Паттерн = r'вес\s(\d+[.,]?\d)\s*кг'

Целевое поле = weight_kg

Тип извлечения = Регулярное выражение_с_извлечением

Правило 5 (извлечение артикула производителя):

Паттерн = r'арт.?\s*(\w+)'

Целевое поле = manufacturer_code

Тип извлечения = Регулярное выражение_с_извлечением

Пример 19. Обработка разных форматов дат

Ячейка может содержать: "2023-12-25", "25.12.2023", "12/25/2023"

Правило 1 (ISO формат):

Паттерн = r'(\d{4})-(\d{2})-(\d{2})'

Целевое поле = date_imported

Тип извлечения = Регулярное выражение_с_извлечением

Правило 2 (российский формат):

Паттерн = r'(\d{2}).(\d{2}).(\d{4})'

Целевое поле = date_imported

Тип извлечения = Регулярное выражение_с_извлечением

Правило 3 (американский формат):

Паттерн = r'(\d{2})/(\d{2})/(\d{4})'

Целевое поле = date_imported

Тип извлечения = Регулярное выражение_с_извлечением

Пример 20. Извлечение нескольких значений из одной ячейки с созданием JSON

Ячейка содержит: "Цвет: синий, Материал: пластик, Размер: M"

С помощью нескольких правил можно заполнить структурированные характеристики:

Правило для цвета:

Паттерн = r'Цвет:\s*([^,;]+)'

Целевое поле = characteristics.color (если поддержка JSON полей)

Правило для материала:

Паттерн = r'Материал:\s*([^,;]+)'

Целевое поле = characteristics.material

Правило для размера:

Паттерн = r'Размер:\s*([^,;]+)'

Целевое поле = characteristics.size

Шпаргалка по регулярным выражениям

Основные символы:

\d - любая цифра (0-9)

\w - любая буква, цифра или знак подчеркивания

\s - любой пробельный символ (пробел, табуляция)

. - любой символ кроме перевода строки

* - предыдущий символ 0 или более раз

+ - предыдущий символ 1 или более раз

? - предыдущий символ 0 или 1 раз

{n} - ровно n раз

{n,m} - от n до m раз

^ - начало строки

$ - конец строки

| - логическое ИЛИ

() - группа захвата

(?:) - незахватывающая группа

[] - класс символов (например [0-9] или [a-zA-Z])

[^] - отрицание класса символов

Полезные шаблоны:

Извлечение числа: (\d+[.,]?\d*)

Извлечение целого числа: (\d+)

Извлечение десятичного числа: (\d+[.,]\d+)

Извлечение слова: (\w+)

Извлечение русского слова: ([а-яА-ЯёЁ]+)

Извлечение email: ([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})

Извлечение URL: (https?://[^\s]+)

Примеры сложных регулярных выражений

Для извлечения цены с валютой: (\d+[.,]?\d*)\s*(руб|₽|\$|€|USD|EUR)

Для извлечения размеров в формате ДхШхВ: (\d+)[x\*×](\d+)[x\*×](\d+)\s*(мм|см|м)?

Для извлечения характеристик вида "ключ: значение": ([а-яА-Я\w\s]+?):\s*([^,;]+)

Для проверки формата артикула: ^[A-Z]{2,3}-\d{5,6}$

Для извлечения бренда из скобок: \(([^)]+)\)

Типичные ошибки

Ошибка: "Правило не срабатывает"

Проверьте что указан правильный Столбец источник (номера начинаются с 1)

Убедитесь что в ячейке действительно есть данные

Проверьте регистр (регулярные выражения по умолчанию чувствительны к регистру)

Для Регулярное выражение_с_извлечением убедитесь что есть группа захвата в круглых скобках

Проверьте что Не изменять существующие не блокирует применение (если поле уже заполнено)

Ошибка: "Извлекается неправильная часть"

Уточните регулярное выражение, используйте более конкретные шаблоны

Используйте якоря ^ и $ для привязки к началу/концу строки

Проверьте что группа захвата одна, если нужно извлечь несколько частей - создайте несколько правил

Ошибка: "Конвертация единиц не работает"

Убедитесь что указан правильный тип Конвертация единиц измерения

Проверьте что паттерн соответствует единице измерения (kg, g, lb, m, cm, mm)

Для сложных случаев используйте Регулярное выражение_с_извлечением и потом ручную конвертацию

Ошибка: "Слишком много ложных срабатываний"

Сделайте паттерн более специфичным

Используйте границы слов \b

Добавьте больше контекста в регулярное выражение

Отсортируйте правила: более специфичные должны идти первыми

Советы

Порядок правил имеет значение: Более специфичные правила ставьте первыми, общие - последними.

Используйте Значение по-умолчанию чтобы гарантировать заполнение полей.

Не изменять существующие для защиты: Если не хотите перезаписывать уже заполненные поля, установите Не изменять существующие = true.

Тестируйте на выборке: Перед массовым импортом проверьте правила на небольшом наборе данных.

Комбинируйте с правилами замены: Иногда проще сначала очистить текст правилами замены, а потом извлекать.

Не усложняйте: Если можно обойтись простым частичным совпадением или точным совпадением, не используйте регулярное выражение.

Для единиц измерения используйте конвертацию единиц измерения вместо регулярного выражения, это надежнее.

Обратите внимание

Если вы извлекаете остаток товара из сложных JSON структур

Добавьте настроку наличия вот в таком виде:

Иначе всё, что будет извлечено, будет перезаписано остатком по-умолчанию, таким образом наличие товара будет определено правильно, но сам остаток будет 1. Поэтому необходимо добавить настройку наличия с параметром не изменять существующее наличие. Также это правило подходит ко всем форматам файлов, где приходится извлекать остатки товаров таким сложным способом.