如果我只想提取第二个斜杠后的第二个,如何在大查询中使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
WIX React本机导航:堆栈中的第二个屏幕显示在第一个屏幕上