Примеры регулярных выражений для 1С

Продолжаем говорить о регулярных выражениях в 1С. Вот пост про использование регулярок в проекте. Ниже приведу еще несколько примеров сразу с кодом на 1С.

1️⃣ Найти номер и дату договора Используется, если нужно найти в тексте, например, назначения платежа номер договора, по которому идет оплата. В зависимости от формата договора регулярное выражение может иметь вот такой вид: s([A-Za-zА-Яа-я0-9-/]+)[^d](d{2}[.]d{2}[.]d{2,4})

Краткое пояснение: s* — игнорирует пробелы. ([A-Za-zА-Яа-я0-9-/]+) — находит номер договора, состоящий из букв, цифр и символов. (d{2}[.]d{2}[.]d{2,4}) — находит дату в формате дд.мм.гггг.

`ИсходнаяСтрока = "Оплата счета по договору №45/Фм от 24.05.2024г. на сумму 10 000 руб, без НДС"; СтрокаРегулярногоВыражения = "s([A-Za-zА-Яа-я0-9-/]+)[^d](d{2}[.]d{2}[.]d{2,4})";

Результат = СтрНайтиПоРегулярномуВыражению(ИсходнаяСтрока, СтрокаРегулярногоВыражения);

Сообщить(Результат.Значение); // Результат - 45/Фм от 24.05.2024

В результате будет выведена строка 45/Фм от 24.05.2024

2️⃣ Найти строку с исключением Используется, если нужно что-то найти, но при этом в строке не должно быть исключения. В этом случае можем использовать вот такой шаблон регулярного выражения: ^(?!.Исключение).СтрокаПоиска

Например, мы хотим найти договоры от контрагента, но исключить договоры за 2023 год. Для этого будем использовать вот такое регулярное выражение: ^(?!.2023).s([A-Za-zА-Яа-я0-9-/]+)[^d](d{2}.?d{2,4})

`СтрокаПоиска = "^(?!.2023).s([A-Za-zА-Яа-я0-9-/]+)[^d](d{2}.?d{2,4})";

СтрокаЗначения = "Оплата счета по договору №45/Фм от 24.05.2023г. на сумму 10 000 руб, без НДС"; Результат = СтрНайтиПоРегулярномуВыражению(СтрокаЗначения, СтрокаПоиска); Сообщить(Результат.Значение); // Результат - ""

СтрокаЗначения = "Оплата счета по договору №68/Ав от 25.09.2024г. на сумму 20 000 руб, без НДС"; Результат = СтрНайтиПоРегулярномуВыражению(СтрокаЗначения, СтрокаПоиска); Сообщить(Результат.Значение); // Результат - "Оплата счета по договору №68/Ав от 25.09.2024г. на сумму 20 000 руб, без НДС"

В первом случае будет выведена пустая строка, а во втором будет выведена полная строка. При этом из групп можно получить нужный результат. Про группы следующий пример.

3️⃣ Найти какая группа сработала Используется, если нужно найти какое из условий поиска сработало. Например, мы в тексте платежа хотим понять, что было оплачено - счет, договор или акт.

Для решения этой задачи создаем вот такой шаблон регулярного выражения: (счет)|(договор)|(акт)

`СтрокаПоиска = "(счет)|(договор)|(акт)";

СтрокаЗначения = "Оплата счета №431"; Результат = СтрНайтиПоРегулярномуВыражению(СтрокаЗначения, СтрокаПоиска, , , , Истина); Для Каждого Группа Из Результат.ПолучитьГруппы() Цикл Если Группа.Длина > 0 Тогда Сообщить(Группа.Значение); // Результат - счет Прервать; КонецЕсли; КонецЦикла;

СтрокаЗначения = "Оплата акта №153/ф"; Результат = СтрНайтиПоРегулярномуВыражению(СтрокаЗначения, СтрокаПоиска, , , , Истина); Для Каждого Группа Из Результат.ПолучитьГруппы() Цикл Если Группа.Длина > 0 Тогда Сообщить(Группа.Значение); // Результат - акт Прервать; КонецЕсли; КонецЦикла;

Если возникнут сложности с каким-нибудь регулярным выражением, то можно попросить помощи у нейросети. С этой задачей они справляются хорошо!

Никита Арипов | 1C. Подписаться```