RegexExtract
⚠️
regexExtract对 MongoDB、SQLite 和 SQL Server 不可用。对于 Druid,regexExtract仅对 Druid-JDBC 驱动程序可用。
regexExtract 使用 正则表达式(regex) 来获取文本的特定部分。
regexExtract 非常适合结构很少或没有结构的文本,例如 URL 或自由格式的调查响应。如果您处理的是格式可预测的字符串,如 SKU 号、ID 或其他类型的代码,请考虑使用更简单的 substring 表达式。
使用 regexExtract 创建自定义列,为以下内容提供更短、更易读的标签:
- 筛选下拉菜单,
- 图表标签,或
- 嵌入式参数。
| 语法 | 示例 |
|---|---|
regexExtract(text, regular_expression) |
regexExtract("regexExtract", "ex(.*)") |
| 使用正则表达式获取文本的特定部分。 | “提取” |
搜索和清理文本
假设您有包含大量不同 URL 的 Web 数据,并且您想将每个 URL 映射到一个更短、更易读的广告系列名称。
| 网址 | 广告系列名称 |
|---|---|
| https://metabase.net.cn/docs/?utm_campaign=alice | alice |
| https://metabase.net.cn/learn/?utm_campaign=neo | neo |
| https://metabase.net.cn/glossary/?utm_campaign=candy | candy |
您可以创建一个名为 **广告系列名称** 的自定义列,使用表达式:
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
在这里,正则表达式模式 ^[^?#]+\? 匹配所有有效的 URL 字符串。您可以将 utm_campaign= 替换为您喜欢的任何查询参数。在正则表达式模式的末尾,捕获组 (.*) 获取 utm_campaign= 查询参数之后的所有字符。
现在,您可以在需要干净标签的地方使用 **广告系列名称**,例如 筛选下拉菜单、图表 和 嵌入式参数。
支持的数据类型
| 数据类型 | 与 regexExtract 配合使用 |
|---|---|
| 字符串是 | ✅ |
| 数字 | ❌ |
| 时间戳 | ❌ |
| 布尔值 | ❌ |
| JSON | ❌ |
限制
regexExtract 对 MongoDB、SQLite 和 SQL Server 不可用。对于 Druid,regexExtract 仅对 Druid-JDBC 驱动程序可用。
正则表达式可能是一门晦涩的学问。您已被警告。
相关函数
本节介绍了与 Metabase regexExtract 表达式工作方式相同的函数和公式,并附有关于如何为您的用例选择最佳选项的说明。
其他工具
Substring
当您想搜索格式一致(字符数相同,字符顺序相同)的文本时,请使用 substring。
例如,您无法使用 substring 从 URL 示例数据 中提取查询参数,因为 URL 路径和参数名称的长度都是可变的。
但是,如果您想提取 https://www. 之后和 .com 之前的任何内容,您可以使用以下任一方法:
substring([URL], 13, 8)
或
regexExtract([URL], "^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/.\n]+)")
SQL
当您使用 笔记本编辑器 运行问题时,Metabase 会将您的图形查询设置(筛选器、汇总等)转换为查询,并针对数据库运行该查询以获取结果。
如果我们的 示例数据 存储在 PostgreSQL 数据库中,则
SELECT
url,
SUBSTRING(url, '^[^?#]+\?utm_campaign=(.*)') AS campaign_name
FROM follow_the_white_rabbit
等同于 Metabase regexExtract 表达式
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
电子表格
如果我们的 示例数据 在电子表格中,“URL”位于 A 列,则电子表格函数
regexExtract(A2, "^[^?#]+\?utm_campaign=(.*)")
使用几乎与 Metabase 表达式相同的语法
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
Python
假设 示例数据 存储在一个名为 df 的数据框列中,则
df['Campaign Name'] = df['URL'].str.extract(r'^[^?#]+\?utm_campaign=(.*)')
执行与 Metabase regexExtract 表达式相同的操作
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
延伸阅读
阅读其他版本的 Metabase 的文档。