regex - 谷歌数据洞察中的 REGEXP_EXTRACT;继续“空”
问题描述
我在 Google 的 Data Studio 中创建报告,过去我已经成功地创建了几个自定义维度,使用REGEXP_MATCH
维度Keyword
结合CASE
语句来创建我需要的维度。这个让我难住了。
我有数据通过Keyword
包含我想提取并显示为自定义维度的子字符串的维度进入。
通过的关键字数据的子集如下所示:
09172018_rp_ws_1_og_
img s4_ac_p_act_
img s5_ws_5_m_
img s4_ws_5_m_
我正在尝试使用REGEXP_EXTRACT
创建一个名为的新计算字段Image type
,它是一个维度,它将所有条目分组,以 img 开头,后跟一个空格,然后是任何字母数字,然后以下划线结尾。因此,所有条目img s4
都将被组合在一起,img s5
将被组合在一起。关键字维度中没有该模式的任何内容都可以完全排除在数据集之外。
null
除了使用之外,我无法获得任何结果REGEXP_EXTRACT
。
即使只是尝试REGEXP_EXTRACT(Keyword, '.*img.*')
在输入新计算字段的公式时产生 null。
让我难过的是我尝试了以下操作,只是为了查看我的语法是否关闭,并且这个公式确实返回了结果(只是不是我想要的,因为图像类型没有聚合)。
CASE
WHEN (REGEXP_MATCH(Keyword, '.*img.*')) THEN Keyword
ELSE "Not Set"
END
知道我哪里出错了吗?REGEXP_EXTRACT(Keyword, 'your reg expression here')
无论我输入什么,我都无法得到任何输出。
解决方案
请注意,为了从中提取任何文本,您应该在正则表达式模式中REGEXP_EXTRACT
定义一个捕获组。简而言之,用一对未转义的括号括起您需要提取的部分。
现在,要匹配img
字符串的开头,您需要使用^
锚点,它匹配字符串位置的开头。
要匹配 1 个或多个字符,请使用+
.
因此,您可以根据您的实际规则使用以下任何一种:
REGEXP_EXTRACT(Keyword, '^img ([a-zA-Z0-9_]+)')
REGEXP_EXTRACT(Keyword, '^img\\s+(\\w+)')
REGEXP_EXTRACT(Keyword, '^img\\s+(.+)')
细节
^
- 字符串的开始img
- 文字子串([a-zA-Z0-9_]+)
- 捕获组 1:一个或多个字母、数字或_
\s+
- 1 个或多个空格\w+
- 1 个或多个单词字符:字母、数字或_
.+
- 除换行符之外的 1 个或多个字符。
推荐阅读
- java - Java 编码风格相关问题
- javascript - 无法将类从 angularjs 传递给 web api
- python - Python 使用 cvxopt 设置 glpk 选项
- javascript - 使用 javascript 聚焦不会像使用 Tab 时那样显示复选框的轮廓样式
- reactjs - “react-admin”不包含名为“Query”的导出
- apache-storm - 如何缩小storm集群规模(离线一台supervisor机)
- c# - 映射到视图模型的父子关系实体
- javascript - 是否需要在 ComponentWillUnmount 中卸载状态?
- c++ - 公共标头未找到其他公共标头
- mysql - 在mysql中填充/连接多对多关系表的多个表