正则表达式 (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 可以匹配 10、100、10 x ^10 无法匹配 1 10、1 10 x 示例 |
$ | 匹配位于字符串结尾的相邻字符。 | 10$ 可以匹配 1 10 、10 10 10$ 无法匹配 10 0、 10 x 示例 |
群组
( ) | 匹配字符串任何位置中按相同顺序排列的字符。 还用于对其他表达式进行分组。 |
(10) 可以匹配 10、101、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")