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

  • 27
  • 10
  • 9 минут

Проверка BIM‑модели на атрибутивное наполнение элементов — один из важнейших этапов контроля ее качества. Важнейший атрибут любого элемента — это его наименование. Зачастую корректности наименования элементов BIM‑модели в EIR выделяются даже не отдельные параграфы или главы, а целые приложения на десятки страниц. Требования предъявляются к наименованиям типов, уровней, рабочих наборов, видов и многому другому...

Недостаточно просто убедиться в том, что у элемента есть наименование, необходимо понять, что наименование дано в соответствии с требованиями, предъявляемыми к BIM‑модели. Но как это сделать?

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

Регулярные выражения (regular expressions)

Что вообще такое регулярные выражения? Обратимся к википедии:

«Регулярные выражения — это формальный язык, используемый в компьютерных программах, работающих с текстом, для поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов».

Не думаю, что стало понятнее... Давайте разбираться...

Каждому из нас приходилось в огромном тексте искать нужный фрагмент. Чтобы не читать весь документ, мы прибегаем к поиску по ключевым словам. В большинстве текстовых редакторах эта функция вызывается комбинацией клавиш ctrl+f.

Так вот такая задача поиска некоторой подстроки (слово, словосочетания, предложение) в тексте крайне часто встречалась и продолжает встречаться в различных областях компьютерных наук. В конце 60-х годов прошлого века американский программист Кен Томпсон разработал механизм поиска по регулярным выражениям. Он предложил описывать шаблон искомой подстроки с помощью специальных символов или, другими словами, разработал формальный язык, названный регулярными выражениями. Предложенный подход оказался крайне удобным и с тех пор де факто стал стандартом.

Перейдем к практике

Давайте попробуем разобраться в основах этого формального языка.

В данной статье для создания и теста регулярных выражений мы будем использовать веб-сервис regex101.

Большинство символов в регулярных выражениях представляют сами себя за исключением специальных символов, вот они: [ ] \ / ^ $ . | ? * + ( ) { }.

Давайте в поисковой строке regex101 введем слово «набор». В введенном ниже тексте для тестирования мы увидим все совпадения. Пока полная аналогия с ctrl+f в любом текстовом редакторе.

Регулярные выражения

Метасимвол «.» в регулярном выражении означает абсолютно любой символ. Введем в поисковую строку «позици.», нашлось «позиций», «позиция», «позиции», так как все они начинаются на «позици», а затем идет некоторый символ.

Регулярные выражения

Если мы хотим найти не любой символ, как в случае с «.», а какой-то конкретный, то необходимо использовать квадратные скобки [ ], перечислив в них возможные значения без пробелов или запятых.

Кроме перечисления символов, в [ ] можно указать диапазон значений, в таком случае границы диапазона необходимо указать через дефис.

Набор символов, заключенных в квадратных скобках [ ], именуется символьным классом. В одном символьном классе может быть несколько значений и диапазонов вместе.

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

Регулярные выражения

Пример использования диапазона в символьной группе. В переводе на русский язык мы ищем 4 подряд идущих символа, каждый из которых является цифрой от 0 до 9. Кроме цифр можно указывать диапазон букв из алфавита.

Регулярные выражения

Для наиболее распространенных символьных классов существуют псевдонимы, я приведу только самые популярные:

Регулярные выражения

Крайне важной частью регулярных выражений являются квантификаторы — специальные символы, определяющие, сколько раз предшествующее выражение может встречаться.

Регулярные выражения

Объединим псевдоним символьной группы \d и квантификатор {4}, получив тем самым лаконичное регулярное выражение для поиска четырёхзначного числа.

Регулярные выражения

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

Регулярные выражения

Давайте объединим полученные знания и составим регулярное выражение для проверки корректности наименования уровня.

Требование возьмем из реального EIR:

Регулярные выражения

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

  1. Первый блок с шифром раздела. В нем нам необходимо перечислить возможные значения подстрок, сделаем это так (АР|КР|ИТП)
  2. Далее идет опциональный блок с номером секции. Он может быть, а может и не быть, укажем это с помощью квантификатора «?», который мы поставим после всего блока. Вначале всегда идет «_С». Далее обязательно идет число, укажем это с помощью псевдонима символьной группы [0-9] — \d. Число может состоять либо из одного знака, либо из двух (здания из более чем 99 секций я не встречал), укажем это с помощью квантификатора {1,2}. Затем всегда идет «-» и снова число, которое мы уже научились описывать. Итого получим (_С\d{1,2}-\d{1,2})?
  3. Далее идет блок с отметкой. Вначале всегда идет «+» или «-», возможные значения символа указываем с помощью символьной группы [±]. Затем всегда идет число до трех знаков, такой шаблон мы уже составляли \d{1,3}. Далее идет «.», но мы помним, что это метасимвол и он ищет не сам себя, а вообще любой знак, чтобы найти именно «.» поставим перед ней «\», сделав так называемое экранирование метасимвола (аналогично можно и нужно поступать с любым другими метасимволами, если мы хотим найти их в тексте). Итого получим [±]\d{1,3}\.\d{3}
  4. Последний блок с описанием уровня. Сначала идет число до двух знаков, а затем слово «этаж», получим \d{1,2}этаж. Перед числом этажа может идти знак «-», учтем это с помощью квантификатора «?». Кроме того, в этом блоке может быть как номер этажа и слово «этаж», так и слово «Подвал», учтем это с помощью перечисления вариантов подстрок. Итого получим (-?\d{1,2}этаж|Подвал)

Соединим все блоки вместе и получим итоговое регулярное выражение (АР|КР|ИТП)(_С\d{1,2}-\d{1,2})?_[±]\d{1,3}\.\d{3}_(-?\d{1,2}этаж|Подвал)

Как использовать регулярные выражения?

После того как мы научились составлять регулярные выражения, встает вопрос: а где и как их использовать? Функционал проверки наименований и других параметров элементов с помощью регулярных выражений существует во многих сервисах для валидации BIM‑моделей. Если у вас есть базовые знания в программировании, написать такой скрипт можно самостоятельно, библиотеки для работы с регулярными выражениями есть во всех современных языках программирования.

Я покажу, как применять регулярные выражения в отечественном сервисе Tangl Control. Помимо широкого функционала для проверки корректности атрибутивного наполнения, Tangl Control позволяет проверить BIM‑модель на коллизии, а все найденные замечания сразу вернуть в Revit.

Для использования регулярных выражений в Tangl Control есть функция «regex». Первый аргумент — параметр, который мы проверяем, второй — регулярное выражение, на которое мы проверяем значение параметра.

Регулярные выражения

Давайте посмотрим на результаты:

Регулярные выражения

Видно, что 3 уровня не прошли проверку. У 1-го уровня шифр раздела имеет значение ВК, хотя может быть только АР, КР или ИТП, у 2-го уровня между номером этажа и словом «этаж» есть пробел, хотя в требовании указано, что никакого пробела там быть не должно, и у 3-го уровня слово «Этаж» написано с большой буквы, хотя в требовании указано, что слово пишется с маленькой буквы.

Подведем итоги

Если вы дочитали эту статью до конца, поздравляю: теперь вы имеете представление о том, что такое регулярные выражения и как они могут быть использованы в BIM.

Я рассказал далеко не о всех возможностях регулярных выражений, но даже те, о которых успел, помогут сделать вашу работу проще, а качество ваших BIM‑моделей выше.

Успехов!

PROTIM
Телефон: +7 (495) 221-50-56

Понравилась статья?

10

А что вы думаете по этому поводу? Поделитесь с нами

Комментарии

Ещё по теме

Как построить стратегию контроля затрат с помощью Big Data и цифровых двойников

Как построить стратегию контроля затрат с помощью Big Data и цифровых двойников

По оценкам экспертов, более половины строительных проектов превышают изначальный бюджет. Рассказываем, как Big Data и цифровые двойники помогают перейти к проактивному контролю затрат и избежать лишних расходов.

1 11 минут 11
Отмена льготы по НДС: что будет, если это всё-таки случится?

Отмена льготы по НДС: что будет, если это всё-таки случится?

Разработчики ПО готовились к отмене нулевого НДС и уже считали потенциальные потери, но ситуация на рынке изменилась. Рассказываем о последних новостях по теме и реакции сообщества на возможные изменения.

1 13 минут 39
Барьеры на пути интеграции BIM и способы их преодоления

Барьеры на пути интеграции BIM и способы их преодоления

Зарубежные эксперты сообщают, что BIM может способствовать получению прибыли, закрывающей изначальные инвестиции в десятки раз. Но на пути достижения этих результатов всё ещё стоят заметные преграды: разбираемся как их преодолеть.

1 7 минут 54
Как ИИ и BIM помогают в строительстве продвинутых медицинских учреждений

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

Медицинские учреждения — одни из самых комплексных с точки зрения инфраструктуры объектов. Рассказываем, как их можно модернизировать и эксплуатировать с помощью ИИ и BIM.

4 7 минут 21