在Google表格中提取网址域根目录

问题描述

一个表中,我有完整的URL列表,如:

https://www.example.com/page-1/product-x?utm-source=google

目标:我只想提取网址的域名部分:

https://www.example.com/

我正在使用以下公式:

=REGEXEXTRACT(A1;"^(?:https?:\/\/)?(?:[^@\n]+@)?(?:www\.)?([^:\/\n?]+)")

testing it时,正则表达式可以正常工作:

https://www.example.com/

但是在Google表格中,它显示为:

example.com
  • 为什么相同正则表达式的结果不一样?
  • 如何在Google表格中更正它?

解决方法

您可以通过删除捕获组(例如,([^:\/\n?]+) => [^:\/\n?]+)或将捕获组转换为非捕获组(即([^:\/\n?]+) =>来修复模式。 (?:[^:\/\n?]+)

=REGEXEXTRACT(A1;"^(?:https?://)?(?:[^@\n]+@)?(?:www\.)?[^:/\n?]+")
=REGEXEXTRACT(A1;"^(?:https?://)?(?:[^@\n]+@)?(?:www\.)?(?:[^:/\n?]+)")

注意

  • 如果正则表达式包含捕获组,则REGEXEXTRACT返回捕获的值
  • 如果正则表达式中没有捕获组,则该函数仅返回整个匹配值。

请注意,由于RE2正则表达式是借助Google表格中的字符串文字定义的,因此您无需在RE2正则表达式中转义/

模式可以简化为^(?:https?://)?[^:/\n?]+,可以匹配http://https://,然后匹配/,换行符或{{ 1}}。

请参见this RE2 regex demo