Data Studio计算字段:如何从URL中提取不含子域名的完整域名
解决Data Studio中提取主域名(过滤所有子域名)的正则问题
我来帮你搞定这个域名提取的需求!你想要的是从任意URL里剥离掉协议(http/https)、所有子域名(不止www),只保留主域名+顶级域名(比如把https://www.example.com/pag.html转成example.com),这个需求用Data Studio的REGEXP_EXTRACT完全可以实现,我来给你拆解正确的正则写法和逻辑。
最终可用的公式
先直接给你能达到预期效果的完整公式,和你Google Sheets里的逻辑对齐,还处理了空值情况:
IFNULL(REGEXP_EXTRACT(URL, r'^(?:https?://)?(?:[^/]+\.)?([^/.]+\.[^/?#]+)'), "")
正则逻辑拆解
我把这个正则的每个部分拆解开,方便你理解为什么它能工作:
^(?:https?://)?:匹配开头的http://或https://,?:表示这是非捕获组——意思是我们不需要提取这部分内容,只是跳过它;?表示这部分是可选的(比如有些URL可能没有协议前缀)。(?:[^/]+\.)?:匹配任意形式的子域名(比如www.、blog.、sub.subdomain.),同样用?:设为非捕获组,?表示子域名是可选的(比如直接输入example.com这种没有子域名的URL也能处理)。[^/]+表示匹配除了斜杠之外的任意字符,直到遇到一个点。([^/.]+\.[^/?#]+):这是核心的捕获组,用来提取我们真正需要的内容:[^/.]+:匹配主域名部分(比如example),排除点和斜杠;\.:匹配主域名和顶级域名之间的点;[^/?#]+:匹配顶级域名(包括多级顶级域名,比如co.uk、org.cn),排除斜杠、问号(URL参数)、哈希(锚点)。
测试各种场景
这个公式能覆盖你遇到的大部分URL情况:
- 输入
https://www.example.com/pag.html→ 输出example.com - 输入
http://blog.test.co.uk/post?param=1→ 输出test.co.uk - 输入
https://sub.subdomain.example.org→ 输出example.org - 输入
example.com(无协议无路径)→ 输出example.com
为什么你之前的尝试有问题?
咱们来复盘下你之前的两个正则:
REGEXP_EXTRACT(URL, "//(.*?)/"):这个只能提取//和第一个/之间的内容,比如www.example.com,没法剥离掉www这类子域名,而且如果URL没有结尾的/就会匹配失败。REGEXP_EXTRACT(URL, '^[^.]+.([^.]+)'):这个正则的逻辑是匹配第一个点之前的内容,然后提取第一个点之后的部分,但它只匹配了一个点后的内容,所以会把example.com变成com,完全丢失了主域名,而且遇到多级子域名或者多级顶级域名就彻底失效了。
额外优化:处理带端口的URL
如果你的URL里有端口号(比如https://www.example.com:8080/path),可以稍微调整正则,把端口部分也排除:
IFNULL(REGEXP_EXTRACT(URL, r'^(?:https?://)?(?:[^/:]+\.)?([^/.]+\.[^/?#]+)'), "")
这里只是把[^/]改成了[^/:],避免把端口号(比如:8080)包含进子域名的匹配里。
内容的提问来源于stack exchange,提问作者Evgeniy
相关产品推荐
相关产品推荐

