1

Программно генерируемые регулярные выражения

Здравствуйте. Вопрос к программистам.


Сталкивались ли вы когда-нибудь в своей практике с программами, в которых регулярные выражения генерировались бы во время рантайма. Писали ли ты такие программы сами? Как вы думаете, хорошее ли это решение?

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

Примерный листинг (не реальный, но очень похоже):

var codeParser = new CodeParser();

codeParser.Prefix = new [] { "0001", "0002", "A001", "A002" };

codeParser.Suffix = CodeParser.Suffixes.Before1995 | CodeParser.Suffixes.Public | CodeParser.Suffixes.Restricted;

codeParser.Postfix = CodeParser.Postfixes.Default;

codeParser.Extensions = new [] { "cdr", "dwg", "ai" };

codeParser.Format = @"^.+\s*<prefix>-<postfix>-(<suffix>)\.<extension>$"

Внутри парсера происходит несколько замен в строке Format, которая в итоге разворачивается в следующее выражение:

^.+\s*\(?\s*(?<prefix>0001|0002|A001|A002)-(?<postfix>[А-Я]{3})-(?<suffix>A\d{4}AA|Z9999ZZ)\s*\)?\s*\.(?<extension>cdr|dwg|ai)$

Это выражение распознаёт номер в, допустим, следующем названии файла (самих файлов тысячи, формат записи номенклатурного номера разный, для чего приходится прогонять имена файлов по нескольким парсерам):

Подвеска передняя правая (0001-АБВ-A1234AA).dwg

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


И всё таки у меня вопрос - а правильно ли здесь использовать регулярное выражение? За исключением того момента, что раз работает - значит правильно.


P.S.: никто не собирается нарушать главное правило программиста и переписывать что-то, что и так работает (да и кто бы дал мне это переписывать), просто хочу знать мнение своих более опытных коллег.

Лига программистов

2.1K поста11.9K подписчика

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества