Оптимизация regex
Из этой темы ты узнаешь:
-
Что такое regex.
-
Как правильно писать regex на Go.
-
Как правильно писать бенчмарки к regex в Go.
Регулярные выражения (их еще называют regexp, или regex) — это механизм для поиска и замены текста в строке, файле, нескольких файлах и т. д. Их используют разработчики в коде приложения, тестировщики в автотестах, а также при работе в командной строке.
Пишем regex
Рассмотрим частые ошибки программистов при написании regex в Golang.
Допустим, у нас есть некоторый текст, который нужно очистить и отформатировать в нем слова согласно правилам.

Имеем следующие правила.

-
replacements — используется слайс паттернов regexp для соблюдения порядка очистки строки.
-
replacementsMap — используется для получения текста по паттерну regexp, на который нужно произвести замену. Пустые кавычки в значении мап говорят, что произойдет замена на пустой текст.
-
replaceWords — словарь замены слов для их форматирования по заданному стандарту.
В большинстве случаев частой ошибкой программистов в Go даже в больших компаниях, где этого обычно не ожидаешь, является компиляция регулярных выражений во время проверки регулярок на каждый вызов функции. Очень часто встречается в сравнении эффективности языков, когда пишут бенчмарки на проверку регулярных выражений и допускают эту ошибку. Попробуем написать неэффективную функцию SanitizeText(text string) string, которая очищает спецсимволы по порядку в первом этапе и заменяет слова по словарю во втором.
Видим следующую функцию.

Потенциальной проблемой здесь является компиляция regex в цикле.
Проверим нашу функцию.

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