2012-06-27 169 views
1

我需要帮助。我如何从字符串获取域名?从字符串获取域名? - Python

例如: “嗨IM夏目漱石,看看我的网站http://www.mysite.com/

我如何得到公正mysite.com

输出例如:

http://www.mysite.com/(如果HTTP输入)

www.mysite.com(如果HTTP没有输入)

mysite.com(如果http和WWW没有进入)

+1

见[这个问题](http://stackoverflow.com/questions/2626995/python-regular-expression-for-domain-names) –

+3

你有什么试过?你有没有想过在字符串中搜索某些定义的特征? –

回答

1
myString = "Hi im Natsume, check out my site http://www.mysite.com/" 
>>> a = re.search("(?P<url>https?://[^\s]+)", myString) or re.search("(?P<url>www[^\s]+)", myString) 
>>> a.group("url") 
'http://www.mysite.com/' 
>>> myString = "Hi im Natsume, check out my site www.mysite.com/" 
>>> a = re.search("(?P<url>https?://[^\s]+)", myString) or re.search("(?P<url>www[^\s]+)", myString) 
>>> a.group("url") 
'www.mysite.com/' 
+0

我得到恒定的错误 – Natsume

+0

笏错误...打印回溯 – shiva

+0

@Natsume键入错误回溯 – shiva

1

嗯......你需要一些方法来定义什么是一些一个“域”。一种方法可能是查找用于URL匹配的正则表达式,并将其应用于字符串。如果成功,您至少知道该字符串包含一个URL,并且可以继续解释该URL以查找主机名,然后您可以从中提取该域(可能)。

1

如果所有的网站有相同的格式,你可以使用这样的正则表达式(在这种特定的情况下工作):但是你需要一个能够解析更复杂的正则表达式

re.findall('http://www\.(\w+)\.com', url) 

为准网址并提取域名。

+0

如果域具有这样的结构,my-web-site.com(\ w +)只找到“site” – derevo

+0

're.findall('http:// www \。([a-zA-Z0-9_-] +)\ .com','http://www.my-web-site。com)' – user278064

1

如果你想使用正则表达式,一种方式可能是 -

>>> s = "Hi im Natsume, check out my site http://www.mysite.com/" 
>>> re.findall(r'http\:\/\/www\.([a-zA-Z0-9\.-_]*)\/', s) 
['mysite.com'] 

..considering URL以 '/'

+0

啊,我喜欢你的代码。但如果用户没有输入http://或www如何获取域名? – Natsume

+0

在这种情况下,你可以简单地做 - '>>> s =“Hi im Natsume,check out my site mysite.com” >>> [t for s.split()if'.com'in t] ['mysite.com']' – theharshest

+0

正则表达式我修改 - > raw = re.findall(r'([a-zA-Z0-9 \。] *)([a-zA-Z0-9 \ /] *)',url),使得正则表达式能够在http://或www被输入时找到域,并且URL位于字符串的开始,结尾或者中间 – Natsume

1
s= "Hi im Natsume, check out my site http://www.mysite.com/" 
start=s.find("http://") if s.find("http://")!=-1 else s.find("https://")+1 
t = s[start+11:s.find(" ",start+11)] 
print(t) 

输出端: mysite.com