Здравствуйте.
 Как из строки "Шок. Конфеты Твикс минис соленая карамель 7кг" или "Шок. Конфеты Твикс минис соленая карамель 2,7кг" выдернуть ЧИСЛО слева от "кг". Ожидаю получить "7" и "2,7".
---
```1c
    Поз=СтрНайти(СтрокаСКг,"кг",НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    СтрокаБезКг=СтрокаСКг;
    Иначе
    СтрокаБезКг=Лев(СтрокаСКг,Поз-1);
    КонецЕсли;
    Поз=СтрНайти(СтрокаБезКг," ",НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    ВесКг=0;
    Иначе
    ВесКг=Число(Сред(СтрокаБезКг,Поз+1));
    КонецЕсли;
```
---
Вариантов много, а тем более нет гарантии, что следующий продаван не напишет по другому, пока, из того что написано - ищите в строке "кг", считывайте инфу слева до пробела, затем выделяете символы, которые являются цифрами и пытаетесь их добыть.
Ну и с вознаграждением - ну не позорьтесь, кому нужно 7 рублей? даже спичек не купишь...
---
Еще- если это не вопрос теоретика, а у вас реальная программа, на которой работают, скорее всего Розница или Ут, то такие данные надо хранить в реквизитах (или РС) товара, а не пытаться выковыривать их из строки
---
Самое сложное в нашей работе - объяснить заказчику, что семантический разбор строк - полное говно. Буквы в тексте не являются хранителями информации.
---
это да... Но к сожалению, приходится с этим сталкиваться, у меня одних процедур по превращению текста в число штук несколько...
---
так может ну его нах такого заказчика?
---
Можно попробовать так:
Ищем цифры и возможные разделители ". ,".
Как только нашли что-то из этого продолжаем искать до первой буквы или пробела, считаем, что это одно число.
Добавляем все найденные числа в массив.
Как-то так:

        МассивСтрокСЧислами = Новый Массив;
 МассивЧисел = Новый Массив;
 МассивИскомыхСимволов = СтрРазделить("0/1/2/3/4/5/6/7/8/9/,/.", "/");
 ИсходнаяСтрока = Объект.ИсходнаяСтрока;
 НайденноеЧисло = "";
 Для Счетчик = 1 По СтрДлина(ИсходнаяСтрока) Цикл

  Если Не МассивИскомыхСимволов.Найти(Сред(ИсходнаяСтрока, Счетчик, 1)) = Неопределено Тогда

   НайденноеЧисло = НайденноеЧисло + Сред(ИсходнаяСтрока, Счетчик, 1); //нашли цифру или разделитель

  Иначе
   Если Не НайденноеЧисло = "" Тогда

    МассивСтрокСЧислами.Добавить(НайденноеЧисло);
    НайденноеЧисло = "";

   КонецЕсли;

  КонецЕсли;

 КонецЦикла;

 Для каждого СтрокаСЧислом Из МассивСтрокСЧислами Цикл

  МассивЧисел.Добавить(Число(СтрЗаменить(СтрокаСЧислом, ",", ".")));

 КонецЦикла;
---
А если буквы "кг" будут в середине строки или будут вообще отсутствовать?
---
Строка может выглядеть по-другому "Славянка Конфеты Обыкновенное чудо сливоч.крем 2,5кг/1 (шт.)"
---
Или так: "Блабла (цена за кг) вес 2,7".
И?
---
```1c
    Поз=СтрНайти(СтрокаСКг,"кг",НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    СтрокаБезКг=СтрокаСКг;
    Иначе
    СтрокаБезКг=Лев(СтрокаСКг,Поз-1);
    КонецЕсли;
    Поз=СтрНайти(СтрокаБезКг," ",НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    ВесКг=0;
    Иначе
    ВесКг=Число(Сред(СтрокаБезКг,Поз+1));
    КонецЕсли;
```
---
Код почти заработал, но не хочет преобразовывать к числу ВесКг=Число(Сред(СтрокаБезКг,Поз+1)); и срабатывает даже для тех строк где не находит "КГ"
---
Код почти заработал, но не хочет Чем обосновывает свое нежелание? Вангую, что для преобразования в число строка должна выглядеть несколько по другому.
---
Код почти заработал, но не хочет преобразовывать к числу Что, так и пишет: "Не хочу!"? Или какое-то более осмысленное сообщение об ошибке? Извините, телепатия сегодня что-то барахлит.
 и срабатывает даже для тех строк где не находит "КГ" Во-первых, отсутствие "кг" в исходном задании не предусмотрено. Во-вторых, если не можете сами подправить даже настолько элементарный алгоритм, то вот:

```1c
    Поз=СтрНайти(СтрокаСКг,"кг",НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    ВесКг=0;
    Иначе
    СтрокаБезКг=Лев(СтрокаСКг,Поз-1);
    Поз=СтрНайти(СтрокаБезКг," ",НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    ВесКг=0;
    Иначе
    СтрокаКг=Сред(СтрокаБезКг,Поз+1);
    Сообщить("Вес: "+СтрокаКг);
    ВесКг=Число(СтрокаКг);
    КонецЕсли;
    КонецЕсли;
```

Выводимые программой сообщения - в студию!
 что, не можете
---
Можно попробовать так:
1. Сначала найти количество входжений числа в строку.
2. Потом в строке найти первое упоминание числа и от него отсчитать количество вхождений +1 (знак разделения).
Но вот только если вы уверенны что в сроке не будет цифр, кроме как веса, а тожет же быть и название "Фабрика-3", и все...
---
вот так заработало

```1c
    Поз=СтрНайти(НРег(СтрокаСКг),СимволыПоискаКГ,НаправлениеПоиска.СКонца);
    Если поз=0 Тогда
    СтрокаБезКг=СтрокаСКг;
    Иначе
    СтрокаБезКг=Лев(СтрокаСКг,Поз-1);
    КонецЕсли;

    //ищем пробел
    ПозПРОБЕЛ=СтрНайти(СтрокаБезКг," ",НаправлениеПоиска.СКонца);

    Если ПозПРОБЕЛ=0 Тогда
    стр.Коэффициент=0;
    Иначе
    стр.Коэффициент=Сред(СтрокаБезКг,ПозПРОБЕЛ+1);
    КонецЕсли;

    //если не нашли, ищем точку
    Если стр.Коэффициент=0 Тогда
    ПозТЧК=СтрНайти(СтрокаБезКг,".",НаправлениеПоиска.СКонца);
    стр.Коэффициент=Сред(СтрокаБезКг,ПозТЧК+1);
    КонецЕсли;
    //если не нашли, ищем Скобку)
    Если стр.Коэффициент=0 Тогда
    ПозСКБ=СтрНайти(СтрокаБезКг,")",НаправлениеПоиска.СКонца);
    стр.Коэффициент=Сред(СтрокаБезКг,ПозСКБ+1);
    КонецЕсли;
```
---
если значения кг именно только так везде представлены и всегда в конце строки то можно так:

```1c
    МассивСтр = СтрРазделить(ВхСтрока," ", Ложь);
    ЗначениеКг = МассивСтр[МассивСтр.ВГраница()];
    ЗначениеКг = СтрЗаменить(ЗначениеКг,"кг",");
    ЧислоТип = Новый ОписаниеТипов("Число");
    ЗначениеКГ = ЧислоТип.ПривестиЗначение(ЗначениеКг);
```

:)