如何只匹配URL的域部分与正则表达式?

时间:2017-03-27 13:14:38

标签: python 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())

5 个答案:

答案 0 :(得分:2)

我建议添加分隔符条件。如果域名可能只包含空格,行的开头/结尾和域前的两个前向斜线以及后面的一个斜杠,则正则表达式将是:

(?: |//|^)([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

答案 1 :(得分:1)

正则表达式不是最简单的方法,您应该使用urlparse.urlparse

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

给出

voperforseanx.top

但是,作为参考,以下是使用正则表达式处理网址的方法:Getting parts of a URL (Regex)

答案 2 :(得分:0)

如果您的字符串模式完全相同,则可以执行此操作:

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]

你可以获得域名。

答案 3 :(得分:0)

在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

答案 4 :(得分:0)

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

在这个正则表达式中:

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

部分,将匹配您正在寻找的,其余的是废品。为了工作,这个正则表达式需要一个gmi修饰符。