【问题标题】:How to extract just domain names from urls? [duplicate]如何从网址中仅提取域名? [复制]
【发布时间】:2022-01-08 06:12:36
【问题描述】:

我有以下 URL 列表:

urls = ["http://arxiv.org/pdf/1611.08097", "https://doi.org/10.1109/tkde.2016.2598561", "https://www.scopus.com/inward/record.uri?partnerID=HzOxMe3b&scp=85116544648&origin=inward"]

从列表的每个元素中,我尝试仅提取域名,例如:arxivdoiscopus

为此我有一个代码:

import re

for url in urls:
    print(re.search('https?://([A-Za-z_0-9.-]+).*', url).group(1))

打印的输出:

arxiv.org
doi.org
www.scopus.com

如何修改上述正则表达式以仅提取域而不提取 www..com.org 等其他内容?

提前致谢。

【问题讨论】:

  • 如果你有类似www.sub.domain.co.uk的东西怎么办?
  • @mozway 绝不会如此
  • 所以总是A.B.CB.C 而你想要B
  • @mozway 是的,完全正确
  • 好的,我modified your regex

标签: python python-3.x regex


【解决方案1】:

要仅获取域的倒数第二个块,您可以将正则表达式修改为:

[re.search('https?://(?:[^/]+\.)?([A-Za-z_0-9-]+)\.[^/.]+(?:/.*)?', url).group(1)
 for url in urls]

输出:

['arxiv', 'doi', 'scopus']
urllib

@AbdulNiyasPM 有一个很好的答案,可惜它被删除了,你可以修改它以获得你想要的:

from urllib.parse import urlparse
[urlparse(url).hostname.split('.')[-2]
 for url in urls]

【讨论】:

    【解决方案2】:

    您可以从字符类中删除点并制作 www。可选的。该值在捕获组 1 中。

    https?://(?:www\.)?([A-Za-z_0-9-]+)
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 2012-09-24
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多