#regex #haskell #coding-style
#регулярное выражение #haskell #стиль кодирования
Вопрос:
У меня есть функция remove
, которая принимает регулярное выражение в виде строки и другой строки. Он удаляет все, что соответствует регулярному выражению, из второй строки и возвращает его.
На данный момент я вызываю remove
функцию с буквальными строками регулярных выражений, например:
remove "(my|a)?string" "Test string" -- returns "Test "
Эта программа будет расти, и будет вызывать множество регулярных выражений, и каждое из них может использоваться несколько раз в программе. Должен ли я хранить их так:
myregex = "(my|a)?string"
или я должен создавать тип данных или что-то еще?
Спасибо
Ответ №1:
Одним из вариантов было бы использовать частичное приложение, как в:
remove regex str = <generic code to remove the regex expression from string>
Для каждого конкретного типа регулярных выражений, которые вы хотите применить, вы можете написать функцию типа:
removeName = remove "<name_regex>"
и так далее. Затем вы можете использовать такие функции, как
removeName "myname"
Ответ №2:
Если производительность вызывает беспокойство, любое регулярное выражение, которое вы собираетесь использовать несколько раз, должно быть скомпилировано один раз и сохранено в скомпилированном виде. Смотрите также Документацию для makeRegex.