RegexExtract
⚠️
regexExtract
不适用于 MongoDB、SQLite 和 SQL Server。对于 Druid,regexExtract
仅适用于 Druid-JDBC 驱动程序。
regexExtract
使用 正则表达式 (regex) 来获取文本的特定部分。
regexExtract
非常适合用于结构较少或没有结构的文本,例如 URL 或自由格式的调查回复。如果您正在处理 SKU 编号、ID 或其他类型的代码等可预测格式的字符串,请改用更简单的 substring 表达式。
使用 regexExtract
创建自定义列,为以下内容提供更短、更易读的标签,例如:
- 筛选器下拉菜单,
- 图表标签,或
- 嵌入参数。
语法 | 示例 |
---|---|
regexExtract(文本, 正则表达式) |
regexExtract("regexExtract", "ex(.*)") |
使用正则表达式获取文本的特定部分。 | “extract” |
搜索和清理文本
假设您有大量不同 URL 的网页数据,并且您想将每个 URL 映射到一个更短、更易读的活动名称。
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=(.*)")
在这里,正则表达式模式 [^[^?#]+\?
](https://www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch07s13.html) 匹配所有有效的 URL 字符串。您可以将 utm_campaign=
替换为您喜欢的任何查询参数。在正则表达式模式的末尾,[捕获组](https://mdn.org.cn/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Backreferences) (.*)
获取查询参数 utm_campaign=
之后出现的所有字符。
现在,您可以在需要清晰标签的地方使用**活动名称**,例如[筛选器下拉菜单](../../../dashboards/filters)、[图表](../../visualizations/visualizing-results)和[嵌入参数](../../../embedding/static-embedding-parameters)。
接受的数据类型
数据类型 | 适用于 regexExtract |
---|---|
字符串 | ✅ |
数字 | ❌ |
时间戳 | ❌ |
布尔值 | ❌ |
JSON | ❌ |
限制
regexExtract
不适用于 MongoDB、SQLite 和 SQL Server。对于 Druid,regexExtract
仅适用于 Druid-JDBC 驱动程序。
正则表达式可能是一门晦涩的艺术。请注意。
相关函数
本节介绍与 Metabase regexExtract
表达式功能相同的函数和公式,并附有关于如何为您的用例选择最佳选项的说明。
其他工具
Substring
当您想搜索具有一致格式(相同数量的字符和相同的相对顺序)的文本时,请使用 substring。
例如,您无法使用 substring
从 [URL 示例数据](#searching-and-cleaning-text) 中获取查询参数,因为 URL 路径和参数名称的长度都是可变的。
但是,如果您想提取 https://www.
之后和 .com
之前的所有内容,您可以使用以下任何一种方法:
substring([URL], 13, 8)
或
regexExtract([URL], "^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/.\n]+)")
SQL
当您使用[notebook编辑器](/glossary/notebook-editor)运行查询时,Metabase 会将您的图形查询设置(筛选器、摘要等)转换为查询,并针对您的数据库运行该查询以获取结果。
如果我们的[示例数据](#searching-and-cleaning-text)存储在 PostgreSQL 数据库中
SELECT
url,
SUBSTRING(url, '^[^?#]+\?utm_campaign=(.*)') AS campaign_name
FROM follow_the_white_rabbit
等同于 Metabase regexExtract
表达式
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
电子表格
如果我们的[示例数据](#searching-and-cleaning-text)位于电子表格中,其中“URL”在 A 列,则电子表格函数
regexExtract(A2, "^[^?#]+\?utm_campaign=(.*)")
其语法与 Metabase 表达式基本相同
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
Python
假设[示例数据](#searching-and-cleaning-text)位于名为 df
的数据帧列中,
df['Campaign Name'] = df['URL'].str.extract(r'^[^?#]+\?utm_campaign=(.*)')
执行与 Metabase regexExtract
表达式相同的操作
regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")
进一步阅读
阅读其他 [Metabase 版本](/docs/all) 的文档。