RegexExtract
⚠️
regexExtract
不适用于 MongoDB、SQLite 和 SQL Server。对于 Druid,regexExtract
仅适用于 Druid-JDBC 驱动程序。
regexExtract
使用正则表达式 (regex) 来获取文本的特定部分。
regexExtract
非常适合结构很少或没有结构的文本,例如 URL 或自由格式的调查回复。如果您处理的是 SKU 编号、ID 或其他类型的代码等可预测格式的字符串,请改用更简单的子字符串表达式。
使用 regexExtract
可以创建带有更短、更易读标签的自定义列,例如
- 筛选下拉菜单,
- 图表标签,或
- 嵌入参数。
语法 | 示例 |
---|---|
regexExtract(文本, 正则表达式) |
regexExtract("regexExtract", "ex(.*)") |
使用正则表达式获取文本的特定部分。 | “提取” |
搜索和清理文本
假设您有包含许多不同 URL 的网络数据,并且您希望将每个 URL 映射到更短、更易读的广告系列名称。
网址 | 广告系列名称 |
---|---|
https://metabase.net.cn/docs/?utm_campaign=alice | 爱丽丝 |
https://metabase.net.cn/learn/?utm_campaign=neo | 尼欧 |
https://metabase.net.cn/glossary/?utm_campaign=candy | 糖果 |
您可以使用表达式创建自定义列 Campaign Name
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
这里,正则表达式模式 ^[^?#]+\?
匹配所有有效的 URL 字符串。您可以将 utm_campaign=
替换为您喜欢的任何查询参数。在正则表达式模式的末尾,捕获组 (.*)
获取查询参数 utm_campaign=
之后出现的所有字符。
现在,您可以在需要清晰标签的地方使用 Campaign Name,例如筛选下拉菜单、图表和嵌入参数。
支持的数据类型
数据类型 | 与 regexExtract 配合使用 |
---|---|
字符串是 | ✅ |
数字 | ❌ |
时间戳 | ❌ |
布尔值 | ❌ |
JSON | ❌ |
限制
regexExtract
不适用于 MongoDB、SQLite 和 SQL Server。对于 Druid,regexExtract
仅适用于 Druid-JDBC 驱动程序。
正则表达式可能是一门黑魔法。特此警告。
相关函数
本节介绍与 Metabase regexExtract
表达式工作方式相同的功能和公式,并附有关于如何为您的用例选择最佳选项的说明。
其他工具
子字符串
当您想要搜索具有一致格式(相同数量的字符和这些字符的相同相对顺序)的文本时,请使用子字符串。
例如,您无法使用 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 的文档。