Google 表格中的正则表达式:从带有 url 的列表中提取具有多个子目录的域

问题描述 投票:0回答:2

我需要从 URL 列表中提取具有给定子目录的域 - /news/、/editorials/、/politics/、/opinion/、/second-opinions/、/editorials/ 等:

https://www.medpagetoday.com/opinion/second-opinions/104083 > medpagetoday.com/opinion https://www.politico.com/news/2023/04/18/bidens-tax-returns-00092675 > politico.com/news

当存在多个部分时,提取到层次结构中的最高层。例如,在 /opinion/ 和 /editorials/ 的情况下:

https://www.nytimes.com/2023/04/14/opinion/editorials/clarence-thomas-trips-supreme-court.html > nytimes.com/2023/04/14/opinion

我发现 regexreplace 可以删除 http(s) 和 www:

=ArrayFormula(REGEXREPLACE(A1:A,".*(^|www\.|//)(.+)\b/?$","$2"))

但不确定如何进一步扩展它。

编辑: 我最终得到了以下解决方案,它看起来很粗糙但似乎有效:

=ArrayFormula(IFERROR(REGEXEXTRACT(""&A2:A,"^(?:https?:\/\/)?(?:www[0-9]*\.)?(.*?\/(news|opinions?|editorials?))(?:\/.*)?$"),""))

仍在努力如何将任意长度的复杂子域截断为域,就像在假设中一样

https://m.sports.yahoo.co.jp/news/202301110/ > yahoo.co.jp/news
。 它可以是任何 TLD/ccTLD。

regex url google-sheets-formula
2个回答
1
投票

如果只想拉取层次结构中的最高层,请使用:

=BYROW(A1:A,LAMBDA(r,IF(r="","",REGEXEXTRACT(r,"^.*(?:www\.)(.+\.com/\w+)"))))

注意:这实现了既定目标,但 3 个示例 URL 中的 2 个不是真实页面,但这对于您的特定用例可能无关紧要。


0
投票

你能测试吗:

=index(if(regexmatch(A2:A,"\.co\."),regexextract(A2:A,"(?:/|\.|^)([^\./]*\.co\..*"&textjoin("|",1,C:C)&")"),
       ifna(regexextract(A2:A,"(?:(?:ftp|https?://)?w*\.*)?(.*?(?:"&textjoin("|",1,C:C)&"))"))))
  • 目录列表在我的试卷
    Column_C

© www.soinside.com 2019 - 2024. All rights reserved.