【问题标题】:How to extract sub-directories from the URL using 'REGEXP_EXTRACT' in Data Studio如何在 Data Studio 中使用“REGEXP_EXTRACT”从 URL 中提取子目录
【发布时间】:2020-02-29 19:34:54
【问题描述】:

我正在尝试使用REGEXP_EXTRACT 从两个斜杠之间的 URL 中提取产品名称。例如,我想从以下 URL 中提取 ace-5

www.abc.com/products/phones/ace-5/
www.abc.com/products/phones/ace-5/?cid=dm66363&bid
www.abc.com/products/phones/ace-5/?fbclid=iwar30dpnmmpwppnla7
www.abc.com/products/phones/ace-5/?et_cid=em_367029&et_rid=130

我有一个正则表达式来提取域名,但这不是我真正想要的。以下是正则表达式:

REGEXP_EXTRACT(page,'^[^.]+.([^.]+)')

它给出以下结果:abc

【问题讨论】:

    标签: regex google-data-studio re2


    【解决方案1】:

    假设产品名称总是固定的第四个路径元素,我们可以试试:

    REGEXP_EXTRACT(page, '(?:[^\/]+\/){3}([^\/]+).*')
    

    或者,如果上述方法不起作用:

    REGEXP_EXTRACT(page, '[^\/]+\/[^\/]+\/[^\/]+\/([^\/]+).*')
    

    这是上面的演示:

    Demo

    【讨论】:

    • 谢谢,蒂姆!该解决方案有效但部分有效。例如,如果我们有以下 URL,则此正则表达式会从中提取“购买”。 www.abc.com/products/phones/ace-5/buy/ 不应该这样。
    • 那么您需要向我们阐明如何找到产品名称的固定规则。如果它的位置是完全任意的,那么可能没有这样的规则。
    • 产品名称将在每个 URL 中的相同位置。一些 URL 可能有更多的子目录,即使这样,产品名称的顺序或位置也不会改变。即使在以下 URL 中,产品名称也在同一位置:www.abc.com/products/phones/ace-5/buy/。但是正则表达式显示的是在最后一个“/”之前出现的字符串,这不应该发生。我对这个 REGEX 的期望是即使 URL 有更多子目录也只显示“ace-5”。
    • 我明白了。尝试更新的答案。如果给你带来麻烦,也请试试这个:^[^\/]+\/[^\/]+\/[^\/]+\/([^\/]+)
    • 更新的 REGEX 在 regex101.com 上测试时按预期工作。但是,当我在 Data Studio 中将它用作计算字段时,它显示以下错误-语法错误:意外的“^”。
    【解决方案2】:

    由于我的 GDS 没有相同的页面,但我尝试使用我的一组数据源(即来自 google 分析的页面)重新创建。

    使用可以根据您的要求使用下面两个斜线后的所有记录。

    REGEXP_EXTRACT(Page,'[^/]+/[^/]+/([^/]+)')
    

    您需要使用此公式创建一个计算列,一旦您创建了此计算列,您可能需要添加一个额外的过滤器来删除那些具有null 值的列。

    示例页面:“/products/phones/ace-5/” 计算列值将是“ace-5”

    只要确保这个正则表达式只会在电话/之后给你提取的单词,如果你之后没有任何记录,它会给你 null 作为回报。

    【讨论】:

    • 上述正则表达式从 URL 中返回“电话”,而不是其后面的产品名称。
    • 能否分享一下Page Dimension的实际值
    • 对不起,我没明白你的意思。您是指页面的完整网址吗?如果是,以下是示例 URL: www.abc.com/products/phones/ace-5/ www.abc.com/products/phones/ace-5/buy/ www.abc.com/products/phones/ace -5/?cid=dm66363&bid 正则表达式应从上述 URL 中提取“ace-5”。
    • 不是页面的完整 URL,而是您在 Google Analytics(分析)中获得的页面维度值:例如:/products/phones/ace-5/
    【解决方案3】:

    下面的REGEXP_EXTRACT Calculated Field 可以解决问题,提取第三个/ 之后的所有字符,直到/ 的下一个实例:

    REGEXP_EXTRACT(Page, "^(?:[^/]+/){3}([^/]+)")
    

    Google Data Studio Report 和一个 GIF 来详细说明

    【讨论】:

    • 拥有“成功”但不包含解释的答案只会促使用户依赖 StackOverflow 志愿者。每个答案都应包含教育解释,以造福于 OP 和成千上万的未来研究人员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2012-05-19
    • 2013-08-21
    • 2015-07-31
    相关资源
    最近更新 更多