【问题标题】:How to replace all URLs in a string with their hostname and tld (e.g. google.com)如何将字符串中的所有 URL 替换为其主机名和 tld(例如 google.com)
【发布时间】:2019-12-11 23:54:00
【问题描述】:

我有一个字符串,其中包含多个 URL 和一些文本。

如何将每个 URL 替换为其主机名和顶级域?

示例输入:www.google.com some text google.com some text http://google.com some text https://stackoverflow.com/questions/ask

所需输出:google.com some text google.com some text google.com some text stackoverflow.com

我找到了 Python 模块 tldextract,但这仅有助于提取主机名 + tld,但对查找和替换所有 URL 没有帮助

提前致谢!

【问题讨论】:

  • 你不能在 www.、http:// 和 https:// 上做一个 .replace 吗?
  • @JammyDodger 我不知道怎么做,因为 URL 都是不同的......我必须动态地这样做
  • @tom 您可以使用 urlparse lib 为字符串中的每个 url 提取顶级域。

标签: python regex string url dns


【解决方案1】:

你也可以使用regex,逻辑如下:

  1. (http[s]?://) --> 捕获 http:// 或 https://
  2. (www\.) --> 捕获 www.
  3. (?<=.[a-z][a-z][a-z])(/[^ ]*) 使用斜线捕获 .com 之后的任何内容,不包括 .com(还有其他域,如 org、net,只要 3 个字母长)
yourString = 'www.google.com some text google.com some text http://google.com some text https://stackoverflow.com/questions/ask'

re.sub(r'(http[s]?://)|(?<=.com)(/[^ ]*)|(www\.)', '', yourString)

Out[1]:'google.com some text google.com some text google.com some text stackoverflow.com'

【讨论】:

    【解决方案2】:

    对于域之前的部分,您可以将'www'(等)替换为'',但该解决方案会忽略无法预测的后缀之后的所有内容。

    试试这个:

    import tldextract
    
    somestr = 'www.google.com some text google.com some text http://google.com some text https://stackoverflow.com/questions/ask'
    
    newstr = ''
    
    for word in somestr.split(' '):
        extracted = tldextract.extract(word)
        if extracted.domain != '' and extracted.suffix != '':
            newstr += extracted.domain + '.' + extracted.suffix + ' '
        else:
            newstr += word + ' '
    
    print(newstr)
    

    【讨论】:

    • 谢谢,太好了;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多