REGEXP_EXTRACT 用于在 Google 数据洞察中提取年份或月份的特定字符串

时间:2021-05-12 08:40:12

标签: regex google-data-studio re2

我正在尝试对我的网站进行分类,但它们的 uri 结构并不总是相同,因此我想在一列中提取年份,在第二列中提取月份。

结果应该是单独的列/字段中的年份和月份:

<头>
网址
/www.site.com/path1/resort/2021/02/sitename 2021 02
/www.site.com/path1/2021/02 2021 02
/www.site.com/path1/2020/11-12 2020 11-12
/www.site.com/path1/2020/07-08 2020 07-08
/www.site.com/path1/resort/

以下正则表达式有效:

REGEXP_EXTRACT(url,'([0-9]{4})') >> result: 2020, null etc.

但是月份的正则表达式并没有只提取月份:

REGEXP_EXTRACT(url,'((?:[0-9]{4}/)[0-9]+.?[0-9]*/)') >> result: 2020/11-12/,2021/02/, null etc.

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你可以使用

(?:^|/)((?:19|20)[0-9]{2})/((?:0?[1-9]|1[0-2])(?:-(?:0?[1-9]|1[0-2]))?)(?:/|$)

参见regex demo

如果每次匹配只需要捕获一次,请将捕获组替换为非捕获组,或者删除额外的模式:

REGEXP_EXTRACT(col_url, '(?:^|/)((?:19|20)[0-9]{2})(?:/|$)') as Year
REGEXP_EXTRACT(col_url, '(?:^|/)((?:0?[1-9]|1[0-2])(?:-(?:0?[1-9]|1[0-2]))?)(?:/|$)') as Month

详情

  • (?:^|/) - 字符串开始或 /
  • ((?:19|20)[0-9]{2}) - 第 1 组:年份、1920 后跟任意两位数
  • / - / 字符
  • ((?:0?[1-9]|1[0-2])(?:-(?:0?[1-9]|1[0-2]))?) - 第 2 组(月):可选的 0 然后 19,或 1 然后 02 (00-12),然后可选出现 - 和相同的月份模式
  • (?:/|$) - / 或字符串结尾。