# Regexextract `regexextract` использует [регулярные выражения (regex)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) для получения определенной части вашего текста. `regexextract` идеально подходит для текста, который практически не имеет структуры, например URL-адреса или ответы на опросы в произвольной форме. Если вы работаете со строками в предсказуемых форматах, таких как номера SKU, идентификаторы или другие типы кодов, вместо этого используйте более простое выражение [подстрока](../expressions/substring.md). Используйте `regexextract` для создания пользовательских столбцов с более короткими и более читаемыми метками для таких вещей, как: - фильтровать выпадающие меню, - метки диаграммы, или - параметры вложения. | Синтаксис | Пример | |---------------------------------------------------------------|-----------------------------------------| | `regexextract(text, regular_expression)` | `regexextract("regexextract", "ex(.*)")`| | Получает определенную часть текста с помощью регулярного выражения.| "вытянуть" | ## Поиск и очистка текста Допустим, у вас есть веб-данные с множеством разных URL-адресов, и вы хотите сопоставить каждый URL-адрес с более коротким и более читаемым названием кампании. | URL | Название кампании | |-------------------------------------------------------|---------------| | https://www.metabase.com/docs/?utm_campaign=alice | alice | | https://www.metabase.com/learn/?utm_campaign=neo | neo | | https://www.metabase.com/glossary/?utm_campaign=candy | candy | Вы можете создать настраиваемый столбец **Название кампании** с выражением: ``` regexextract([URL], "^[^?#]+\?utm_campaign=(.*)") ``` Здесь шаблон вытаскивания текста [`^[^?#]+\?` соответствует всем допустимым строкам URL](https://www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch07s13.html). Вы можете заменить `utm_campaign=` любым параметром запроса, который вам нравится. В конце шаблона вытаскивания текста[группа захвата](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Backreferences) `(.*)` получает все символы, которые появляются после параметра запроса `utm_campaign=`. Теперь вы можете использовать **Название кампании** там, где вам нужны чистые метки, например, в [выпадающих меню фильтров](../../../dashboards/filters.md), [диаграммах](../../sharing/visualizing-results.md) и [параметрах встраивания](../../../embedding/signed-embedding-parameters.md). ## Допустимые типы данных | [Тип данных](https://www.metabase.com/learn/databases/data-types-overview#Примерs-of-data-types) | Работает с `regexextract` | | ----------------------- | -------------------- | | Строка | ✅ | | Число | ❌ | | Дата Время | ❌ | | Условие | ❌ | | JSON | ❌ | ## Ограничения Вытаскивание текста может быть темным искусством, мы вас предупредили. `regexextract` не поддерживается в H2 (включая образец базы данных Metabase), SQL Server и SQLite. ## Связанные функции В этом разделе рассматриваются функции и формулы, которые работают так же, как выражение GlarusBI `regexextract`, с примечаниями о том, как выбрать лучший вариант для вашего случая использования. **[Выражения GlarusBI](../expressions-list.md)** - [Подстрока](#substring) **Другие инструменты** - [SQL](#sql) - [Таблицы](#spreadsheets) - [Python](#python) ### Подстрока Используйте [substring](../expressions/substring.md), если вы хотите найти текст, который имеет согласованный формат (то же количество символов и тот же относительный порядок этих символов). В примере вы не сможете использовать `substring` для получения параметра запроса из [образца данных URL](#searching-and-cleaning-text), потому что пути URL и имена параметров имеют переменную длину. Но если вы хотите вытащить все после `https://www.` и до `.com`, вы можете сделать это с помощью: ``` substring([URL], 13, 8) ``` or ``` regexextract([URL], "^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/.\n]+)") ``` ### SQL Когда вы задаете вопрос с помощью [редактора блокнота](https://www.metabase.com/glossary/notebook_editor), GlarusBI преобразует ваши графические настройки запроса (фильтры, сводки и т. д.) в запрос и запускает этот запрос. против вашей базы данных, чтобы получить ваши результаты. Если наши [примеры данных](#searching-and-cleaning-text) хранятся в базе данных PostgreSQL: ```sql SELECT url, SUBSTRING(url, '^[^?#]+\?utm_campaign=(.*)') AS campaign_name FROM follow_the_white_rabbit ``` равно выражению GlarusBI `regexextract`: ``` regexextract([URL], "^[^?#]+\?utm_campaign=(.*)") ``` ### Таблицы Если наши [примеры данных](#searching-and-cleaning-text) находятся в электронной таблице, где «URL» находится в столбце A, функция электронной таблицы ``` regexextract(A2, "^[^?#]+\?utm_campaign=(.*)") ``` использует почти тот же синтаксис, что и выражение GlarusBI: ``` regexextract([URL], "^[^?#]+\?utm_campaign=(.*)") ``` ### Python Предполагая, что [пример данных](#searching-and-cleaning-text) находится в столбце фрейма данных с именем `df`, ``` df['Campaign Name'] = df['URL'].str.extract(r'^[^?#]+\?utm_campaign=(.*)') ``` делает то же самое, что и выражение GlarusBI `regexextract`: ``` regexextract([URL], "^[^?#]+\?utm_campaign=(.*)") ``` ## Дополнительная информация - [Документация по кастомным выражениям](../expressions.md) - [Руководство по кастомным выражениям. Документация Metabase](https://www.metabase.com/learn/questions/custom-expressions)