簡體   English   中英

如何只匹配URL的域部分與正則表達式?

[英]How to match only the domain part of a URL with regex?

我正在編寫一個Python代碼來處理一個文本塊,在文本中,對於我來說,這些文本對URL沒有用處。 在文本塊之外我只需要域,而不是完整的URL。 輸入示例:

47.91.158.176 or 54.145.185.110 port 80 - gooolgeremf.top - GET /search.php
47.90.205.113 or 35.187.59.173 port 80 - voperforseanx.top/site/chrome_update.html

所以這里我只需要gooolgeremf.topvoperforseanx.top匹配,但我寫的正則表達式也匹配search.phpchrome_update.html

我在想的是正則表達式應該在/之后停止匹配。 但是我不知道如何實現它,特別是如何防止在第一個/整個文本文件之后出現的匹配域。

到目前為止我的代碼中的工作方式:

regexdm="[A-Za-z0-9]{1,}\.[A-Za-z0-9]{1,10}\.?[A-Za-z]{1,}\.?[A-Za-z]{1,}"
dmsc=re.findall(regexdm, iocsd.read())

我建議添加分隔符條件。 如果域名可能只被空格,行的開始/結束和域前的兩個前向斜線以及后面的一個斜線所包圍,則正則表達式將是:

(?: |//|^)([A-Za-z0-9]{1,}\.[A-Za-z0-9]{1,10}\.?[A-Za-z]{1,}\.?[A-Za-z]{1,})(?: |/|$)

演示: https//regex101.com/r/TQKlDP/1

正則表達式不是最簡單的方法,你應該使用urlparse.urlparse

from urlparse import urlparse
parsed_uri = urlparse('http://voperforseanx.top/site/chrome_update.html')
print parsed_uri.netloc

voperforseanx.top

但是,作為參考,這里是如何使用正則表達式處理URL: 獲取URL的一部分(正則表達式)

在Python 2.7.13中,另一種方式示例(取決於輸入模式):

str = "47.90.205.113 or 35.187.59.173 port 80 - voperforseanx.top/site/chrome_update.html"
parsed_uri = str.split()[6].split('/')[0]
print parsed_uri
>> voperforseanx.top
(\b[\w\.]+\.[a-zA-Z]{2,}\b)(.+)$

在這個正則表達式中:

(\b[\w\.]+\.[a-zA-Z]{2,}\b)

部分,將匹配您正在尋找的,其余的是廢品。 為了工作,這個正則表達式需要一個gmi修飾符。

暫無
暫無

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

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