簡體   English   中英

使用 python 的正則表達式從 URL 中提取域名

[英]Extract domain name from URL using python's re regex

我想輸入一個 URL 並提取域名,即 http:// 或 https:// 之后的字符串,包含字符串、數字、點、下划線或破折號。

我編寫了正則表達式並使用了 python 的re模塊,如下所示:

import re
m = re.search('https?://([A-Za-z_0-9.-]+).*', 'https://google.co.uk?link=something')
m.group(1)
print(m)

我的理解是m.group(1)會在 re.search 中提取 () 之間的部分。

我期望的輸出是: google.co.uk但我得到的是:

<_sre.SRE_Match object; span=(0, 35), match='https://google.co.uk?link=something'>

你能告訴我如何使用re來實現我的要求嗎?

你需要寫

print(m.group(1))

更好的是 - 之前有一個條件:

m = re.search('https?://([A-Za-z_0-9.-]+).*', 'https://google.co.uk?link=something')
if m:
    print(m.group(1))

Jan 已經為此提供了解決方案。 但請注意,我們可以在不使用re的情況下實現相同的功能。 它所需要的只是,"#$%&\'()*+.-:/;?<=>?@[\\]^_`{|}~用於驗證目的。同樣可以從string包中獲得.

def domain_finder(link):
    import string
    dot_splitter = link.split('.')

    seperator_first = 0
    if '//' in dot_splitter[0]:
        seperator_first = (dot_splitter[0].find('//') + 2)

    seperator_end = ''
    for i in dot_splitter[2]:
        if i in string.punctuation:
            seperator_end = i
            break

    if seperator_end:
        end_ = dot_splitter[2].split(seperator_end)[0]
    else:
        end_ = dot_splitter[2]

    domain = [dot_splitter[0][seperator_first:], dot_splitter[1], end_]
    domain = '.'.join(domain)

    return domain

link = 'https://google.co.uk?link=something'
domain = domain_finder(link=link)
print(domain) # prints ==> 'google.co.uk'

這只是不用re解決相同問題的另一種方法。

在這種情況下,有一個名為tldextract的庫非常可靠。

這是它的工作原理

import tldextract

def extractDomain(url):
    if "http" in str(url) or "www" in str(url):
        parsed = tldextract.extract(url)
        parsed = ".".join([i for i in parsed if i])
        return parsed
    else: return "NA"

op = open("out.txt",'w')
# with open("test.txt") as ptr:
#   for lines in ptr.read().split("\n"):
#       op.write(str(extractDomain(lines)) + "\n")

print(extractDomain("https://test.pythonhosted.org/Flask-Mail/"))

輸出如下,

test.pythonhosted.org

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM