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

  • 79
  • 1
  • 12
  • 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

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

12

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

Комментарии

Ekaterina Chernova
Честно говоря, статья оказалась очень понятной даже для тех, кто раньше вообще не сталкивался с регулярными выражениями. Автор не перегружает сложными формулировками и шаг за шагом объясняет, что это за инструмент и зачем он нужен в BIM. Особенно понравилось, что всё сразу показывается на примерах — я буквально на ходу поняла, как можно искать и проверять нужные данные в моделях.
Ответить

Ещё по теме

Советское наследие: строительные инновации, опередившие время

Советское наследие: строительные инновации, опередившие время

Когда сегодня говорят «советское строительство», в воображении обычно всплывают серые панельки, однотипные фасады и пресловутая «убогость». Но если убрать эмоции и посмотреть на это глазами инженера, становится очевидно: перед нами не архитектурный провал, а одна из самых масштабных и технологически дерзких строительных программ XX века.

9 8 минут 69 11
Как бесплатно ускорить создание рабочей документации кабельных трасс в ТИМ‑форматах ведущих российских САПР

Как бесплатно ускорить создание рабочей документации кабельных трасс в ТИМ‑форматах ведущих российских САПР

Проектирование кабельных трасс, по статистике, в среднем занимает около 15% от всего временного ресурса проектировщиков. Если объект сложный, то бывает и больше. Часть этого времени уходит на «креатив», а часть — на «рутину» (различные «заготовки»). В этой статье я расскажу о том, как можно сократить рутину для создания рабочей документации в ТИМ‑форматах ведущих российских САПР без дополнительных затрат времени и денег.

4 10 минут 44
Системный подход в проектировании: зачем компаниям канбан и как его использовать на практике

Системный подход в проектировании: зачем компаниям канбан и как его использовать на практике

В статье разбираем, зачем проектировочным, инжиниринговым, строительным и архитектурным компаниям нужен канбан, как этот подход помогает навести порядок в задачах, убрать хаос в проектах и сделать работу команды предсказуемой. На примере Planoplan покажем, как использовать канбан в Аспро.Cloud для управления проектами и взаимодействия с клиентами.

13 10 минут 34 3
«Я не робот»: как инженеру сохранить психику в мире дедлайнов, правок и синдрома отличника

«Я не робот»: как инженеру сохранить психику в мире дедлайнов, правок и синдрома отличника

Эта статья — сознательный выход за рамки традиционного формата профессиональных публикаций. Но возможность побороться за iPhone 17 и обсудить то, о чем мы обычно молчим на митапах, перевесила сомнения. Надеюсь, мой опыт будет полезен коллегам.

21 7 минут 234 12