Looker Studio 中的正则表达式

正则表达式 (regexp) 是宽泛或精确地匹配数据中模式的特定字符序列。您可以使用正则表达式在图表和控件中创建更灵活的过滤条件。您还可以在计算字段公式中使用以下正则表达式函数:

REGEXP_CONTAINS 如果输入值包含正则表达式模式,则返回 true,否则返回 false。

详细了解 REGEXP_CONTAINS
REGEXP_EXTRACT 返回输入值中与正则表达式模式匹配的第一个子字符串。

详细了解 REGEXP_EXTRACT
REGEXP_MATCH 如果输入值与正则表达式模式匹配,则返回 true,否则返回 false。

详细了解 REGEXP_MATCH
EGEXP_REPLACE 将输入值中与正则表达式模式匹配的所有文本替换为 replacement 字符串。

详细了解 EGEXP_REPLACE

使用正则表达式的替代方案

构建正则表达式可能很复杂。在使用正则表达式函数之前,请考虑使用更简单的文本函数是否能实现您的目标。以下函数提供类似正则表达式的功能,而无需您了解正则表达式语法。

函数 说明
CONTAINS_TEXT

如果字段或表达式中包含指定文本,返回 true,否则返回 false。

ENDS_WITH

如果字段或表达式以指定文本结尾,返回 true,否则返回 false。

LEFT_TEXT

返回指定字符串开头的一些字符。

REPLACE 返回原始文本的副本,并将出现的这段搜索文字全部替换为替换文字。
RIGHT_TEXT

返回指定字符串末尾的一些字符。

STARTS_WITH

如果字段或表达式以指定文本开头,返回 true,否则返回 false。

TRIM

返回移除了前导和尾随空格的文本。

正则表达式示例

如果 MyField 包含空格字符,则匹配

REGEXP_CONTAINS(MyField, "\\s+")

提取网址中的顶级目录

REGEXP_EXTRACT(URL, ^https://[^/]+/([^/]+)/)

例如,如果 URL 字段包含此页面的地址,则上一个函数会返回 looker-studio

按语言对广告系列进行分类:

CASE
    WHEN REGEXP_MATCH(Campaign 2, R".*\|\s*en\s*\|.*") then "English"
    WHEN REGEXP_MATCH(Campaign 2, R".*\|\s*es\s*\|.*") then "Spanish"
    ELSE "Other language"
END

例如,将此正则表达式应用于 Google Analytics 演示账号中的广告系列维度会得到以下结果:

广告系列 语言
广告系列 1 其他语言
1000549 | Google Analytics 演示 | DR | apontes | NA | US | en | 混合 | AW SEM | BKWS | ~ AW - Google 品牌(美国) 英语
1000549 | Google Analytics 演示 | DR | apontes | NA | CA | es | 混合 | AW SEM | BKWS | ~ AW - YouTube (CA) 西班牙语

交换字符串中各部分的顺序

REGEXP_REPLACE(Campaign, R'(.*):(.*)', R'\2 \1')

在前面的示例中,各个部分之间以英文冒号 (:) 分隔。

元字符

元字符是指在正则表达式中具有特殊含义的字符。以下是您可以使用的一些常见元字符。请注意,这些示例将在 Google Analytics 帮助中心中打开,但其中显示的信息同样适用于 Looker Studio。

通配符

匹配任何单个字符(字母、数字或符号)。 1. 可以匹配 10、1A

1.1 可以匹配 111、1A1

示例
匹配前面的字符 0 次或 1 次。 10? 可以匹配 1、10

示例
+ 匹配前面的字符 1 次或多次。 10+ 可以匹配 10、100

示例
* 匹配前面的字符 0 次或多次。 1* 可以匹配 1、10

示例
| 创建 OR(或)匹配。

请勿在表达式末尾使用。
1|10 可以匹配 1、10

示例

定位

^ 匹配位于字符串开头的相邻字符。 ^10 可以匹配 10100、10 x

^10 无法匹配 1 10、1 10 x

示例
$ 匹配位于字符串结尾的相邻字符。 10$ 可以匹配 1 10 、10 10

10$ 无法匹配 10 0、 10 x

示例

群组

( ) 匹配字符串任何位置中按相同顺序排列的字符。

还用于对其他表达式进行分组。
(10) 可以匹配 10101、1011

([0-9]|[a-z]) 可以匹配任何数字或小写字母

示例
[ ] 匹配字符串任何位置中按任何顺序排列的字符。 [10] 可以匹配 012、120、210

示例
- 使用方括号可限定要匹配字符串中任何位置的字符的范围。 [0-9] 可以匹配从 0 到 9 的任何数字

示例

Esc

\\

表示相邻字符应按字面意思解释,而不应解释为正则表达式元字符。

\\ 表示相邻的点号应解释为句点或小数点,而非通配符

216\\.239\\.32\\.34 可以匹配 216.239.32.34

示例

字符类

\d 数字(≡ [0-9])
\D 非数字 (≡ [^0-9])
\s 空格 (≡ [\t\n\f\r ])
\S 非空格 (≡ [^\t\n\f\r ])
\w 字词字符(≡ [0-9A-Za-z_])
\W 非字词字符 (≡ [^0-9A-Za-z_])

提示

使用简单的表达式

正则表达式越简单越好,以便于其他用户进行解读和修改。

区分大小写

默认情况下,正则表达式区分大小写。您可以使用 (?i) 标志使匹配不区分大小写。例如,以下表达式会同时提取“abc123”和“ABC123”:

REGEXP_EXTRACT(MyField, '(?i)(a.*)')

转义反斜杠

如前所述,当您需要按字面意思解释某些字符时,请使用反斜杠 (\) 对相关的正则表达式元字符进行转义。如需匹配引号字符串中的反斜杠,您还需要对其进行转义,这会导致表达式中出现两个反斜杠。例如:

REGEXP_REPLACE(String, "(\\[.*\\])\\+(\\[.*\\])","\\2 \\1")

作为替代方案,请考虑使用原始字符串字面量前缀 R

REGEXP_REPLACE(String, R"(\[.*\])\+(\[.*\])",R"\2 \1")