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 表达式工作方式相同的功能和公式,并附有关于如何为您的用例选择最佳选项的说明。

Metabase 表达式

其他工具

子字符串

当您想要搜索具有一致格式(相同数量的字符和这些字符的相同相对顺序)的文本时,请使用子字符串

例如,您无法使用 substringURL 示例数据中获取查询参数,因为 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 的文档。

这有帮助吗?

感谢您的反馈!
想要改进这些文档?提出修改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.