我正在编写一个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.top
和voperforseanx.top
匹配,但我写的正则表达式也会匹配search.php
和chrome_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())
答案 0 :(得分:2)
我建议添加分隔符条件。如果域名可能只包含空格,行的开头/结尾和域前的两个前向斜线以及后面的一个斜杠,则正则表达式将是:
(?: |//|^)([A-Za-z0-9]{1,}\.[A-Za-z0-9]{1,10}\.?[A-Za-z]{1,}\.?[A-Za-z]{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修饰符。