2012-06-27 3 views
1

Мне нужна помощь. Как получить домен из строки?Получить домен из строки? - Python

Например: "Привет им Natsume, проверить мой сайт 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 напечатать ошибку traceback – shiva

1

Ну ... Вам нужно каким-то образом определить, что вы считаете тем, что имеет «домен». Одним из подходов может быть поиск регулярного выражения для сопоставления URL-адресов и применение этого к строке. Если это удастся, вы, по крайней мере, знаете, что строка содержит URL-адрес и может продолжать интерпретировать URL-адрес, чтобы искать имя хоста, из которого вы можете извлечь домен (возможно).

1

Если все узлы имели один и тот же формат, вы можете использовать регулярное выражение, как это (которые работают в данном конкретном случае):

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

Однако вам нужно более сложное регулярное выражение, способного анализировать зависимости от того, url и извлечь доменное имя.

+0

, если у домена есть такая структура, my-web-site.com (\ w +) найти только «сайт» – 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

Ahh Мне нравится ваш код. Но как получить домен, если пользователь не вводил http: // или www? – Natsume

+0

В этом случае вы можете просто сделать - '>>> s =" Привет im Natsume, проверьте мой сайт mysite.com " >>> [t для t в s.split() if '.com' in t] ['mysite.com'] ' – theharshest

+0

regex i modified -> raw = re.findall (r '([a-zA-Z0-9 \.] *) ([a-zA-Z0-9 \ /] *) ', url), im tyring, чтобы заставить регулярное выражение находить домен, если 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

Смежные вопросы