Функция РаспарситьТекстБилетовНативно(Знач ТекстБилетов) Экспорт
Результат = Новый Массив;
// 1. Очистка от экранирующих кавычек
ТекстБилетов = СтрЗаменить(ТекстБилетов, """", "");
// 2. Разбиваем текст на строки и склеиваем "разорванные" записи
МассивСырыхСтрок = СтрРазделить(ТекстБилетов, Символы.ПС, Ложь);
МассивСтрок = Новый Массив;
// Упаковываем все регулярные выражения в одну структуру
РегВыражения = Новый Структура;
РегВыражения.Вставить("Начало", Новый РегулярноеВыражение("(?i)^(Авиабилет|Электронный|Ж/д|Автобусный|Сверхнормативный|Доплата|а/б)"));
РегВыражения.Вставить("Тип", Новый РегулярноеВыражение("(?i)^(Авиабилет|Электронный ж/д билет|Ж/д билет|Автобусный билет|Сверхнормативный багаж[^(]*|Доплата за обмен[^(]*|а/б)"));
РегВыражения.Вставить("Перевозчик", Новый РегулярноеВыражение("(?i)\(\s*перевозчик\s*(.*?)(?:,\s*ИНН\s*(\d*))?\s*\)"));
РегВыражения.Вставить("Класс", Новый РегулярноеВыражение("(?i)\((Эконом|Купе|Плацкарт|Сидячий)\)"));
РегВыражения.Вставить("Дата", Новый РегулярноеВыражение("(?i)(\d{2}\.\d{2}\.\d{4}(?:\/\d{2}\.\d{2}\.\d{4})?)"));
РегВыражения.Вставить("Пассажир", Новый РегулярноеВыражение("(?i)\s+([А-Яа-яЁёA-Za-z\-]+\s+[А-Яа-яЁёA-Za-z]+\s+[А-Яа-яЁёA-Za-z]+|[А-Яа-яЁёA-Za-z\-]+\s+[А-Яа-яЁёA-Za-z]\.?\s*[А-Яа-яЁёA-Za-z]\.?\.?)$"));
РегВыражения.Вставить("НомерМаршрут", Новый РегулярноеВыражение("(?i)^([A-Za-z0-9\s/\.]+?)\s+([А-Яа-яЁёA-Za-z].*)$"));
Для Каждого Стр Из МассивСырыхСтрок Цикл
СтрОчищ = СокрЛП(Стр);
Если ПустаяСтрока(СтрОчищ) Тогда
Продолжить;
КонецЕсли;
Если РегВыражения.Начало.Совпадает(СтрОчищ) Тогда
МассивСтрок.Добавить(СтрОчищ);
Иначе
Если МассивСтрок.Количество() > 0 Тогда
ИндексПоследней = МассивСтрок.ВГраница();
МассивСтрок[ИндексПоследней] = МассивСтрок[ИндексПоследней] + " " + СтрОчищ;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// 3. Вызов отдельной функции парсинга: теперь передаем всего 2 параметра
Для Каждого СтрокаБилета Из МассивСтрок Цикл
ДанныеБилета = РаспарситьСтрокуБилета(СтрокаБилета, РегВыражения);
Результат.Добавить(ДанныеБилета);
КонецЦикла;
Возврат Результат;
КонецФункции