如果我只想提取第二个斜杠后的第二个,如何在大查询中使用 regex_extract?

Posted

技术标签:

【中文标题】如果我只想提取第二个斜杠后的第二个,如何在大查询中使用 regex_extract?【英文标题】:How to use regex_extract in big query if I want to only extract the second after second slash? 【发布时间】:2020-03-13 15:20:05 【问题描述】:

我正在使用regexp_extract(hit.page.pagepath,r'www.abcd.com/(.*?)/'),但它在大查询中给了我'sports',我只想在'sports''gamescore' 之前提取,即'football'

网址https://www.abcd.com/sports/football/gamescore 是一个不断变化的示例,但www.abcd.com 是不变的。

我想始终提取网址的第二个斜杠部分 - 即 /football/

【问题讨论】:

【参考方案1】:

你的尝试非常接近:

regexp_extract(hit.page.pagepath, r'www.abcd.com/[^/]+/([^/]+)/') 

[^/]+ 表示除/ 之外的一系列字符(至少一个字符)。

【讨论】:

【参考方案2】:

split() 是一种简单的方法:

select split('https://www.abcd.com/sports/football/gamescore', '/')[safe_ordinal(4)]

【讨论】:

@DivyangJain 。 . .你有理由不接受这个答案吗?这似乎是解决您的问题的最简单方法。【参考方案3】:

以下是 BigQuery 标准 SQL

我建议使用下面的正则表达式来消除对硬编码域的依赖

REGEXP_EXTRACT(url, r'(?:https://|http://|)(?:.*?/)2([^/]*)')  

您可以使用下面的示例进行测试,玩它

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'https://www.abcd.com/sports/football/gamescore' url UNION ALL
  SELECT 'http://www.abcd.com/sports/football/gamescore' url UNION ALL
  SELECT 'www.abcd.com/sports/football/gamescore' url UNION ALL
  SELECT 'www.abcd.com/sports/football' url UNION ALL
  SELECT 'www.abcd.com/sports/' url 
)
SELECT REGEXP_EXTRACT(url, r'(?:https://|http://|)(?:.*?/)2([^/]*)')
FROM `project.dataset.table`   

结果

Row f0_  
1   football     
2   football     
3   football     
4   football     
5         

显然 - 您可以进一步调整它以呈现您的真实用例

例如,通过更改2,您可以控制要提取url的哪一部分

【讨论】:

以上是关于如果我只想提取第二个斜杠后的第二个,如何在大查询中使用 regex_extract?的主要内容,如果未能解决你的问题,请参考以下文章

在斜杠之间提取字符串,但第二个斜杠可能不存在[重复]

从文本文件中提取一行中的第二个单词

SQL Regex 在第二个和第三个正斜杠之间选择字符串

WIX React本机导航:堆栈中的第二个屏幕显示在第一个屏幕上

如何更改从第一个活动单击的按钮上的第二个活动的文本? [科特林]

Jquery取消注释head标签内的第二个孩子