Как найти текст между? (Спарсить)

Версия для печатиPDF-версия

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

Сейчас стоит задаче вывести (раскидать) данную инфу по отдельным реквизитам.

Необходимо текст (спарсить) и получить определенные данные.

Например:

Реакция: Заинтересован в сделке;  Поведение: Говорил возбужденно, частил, активно жестикулировал; …

Комментах другого сотрудника о подобном будут другие слова:

Реакция: Подтвердил намерения закупить;  Поведение: Веселый, Тараторил без умолку;…

 

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

Между Реакция: и ;

Этот же метод можно использовать и в парсингах сайтов.

У меня парсится почта с заказами, но отбор циклом идет по тегам:


	  	   ЭлементыDOM2 = HTMLDocument.getElementsByTagName("B");
	   Для Каждого СтрB из ЭлементыDOM2 Цикл
			НомерЗаказа =  СтрB.innerText;
…

А как сделать поиск по обычному тексту строки не нашел. ((

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

У вас строка - в ней можно найти положение знаков ":" и ";" . Получите индекс этих знаков, Потом с помощью поиска текста в середине (немного пошаманить)

Сред(Строка, 7, 4)

Получаем 4 символа из текстовой строки, начиная с позиции 7.
Довольно грубый метод, но за неимением других вариантов я бы попробовал. Вероятно вам предложат более техничные варианты

Вот набросал функцию для парсинга:

Функция ПолучитьДанныеИзСтроки(Знач ОбрабатываемаяСтрока, ОткрывающийТег, ЗакрывающийТег = ";")
	Если СтрДлина(ОбрабатываемаяСтрока) = 0 Тогда 
		Возврат "";
	КонецЕсли;
	НачальныйСимвол = Найти(ОбрабатываемаяСтрока, ОткрывающийТег);
	Если НачальныйСимвол = 0 Тогда 
		Возврат "";
	КонецЕсли;
	ОбрезаннаяСтрока = Сред(ОбрабатываемаяСтрока, НачальныйСимвол + СтрДлина(ОткрывающийТег));
	КонечныйСимвол = Найти(ОбрезаннаяСтрока, ЗакрывающийТег);
	Если КонечныйСимвол = 0 Тогда 
		Возврат СокрЛП(ОбрезаннаяСтрока);
	Иначе 
		Возврат СокрЛП(Лев(ОбрезаннаяСтрока, КонечныйСимвол - 1));
	КонецЕсли;
КонецФункции

Вызывать функцию можно так:

Реакция = ПолучитьДанныеИзСтроки(Комментарий, "Реакция:");

Крутейшая штука!

Испытал. Все работает.

На базе этого можно любой парсинг написать.

Я в восторге.

Огромное спасибо.

Пользуйся на здоровье.

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