2012-06-28 3 views
2

Ok как я использовать регулярное выражение для удаления HTTP И/ИЛИ WWW просто получить http://www.domain.com/ в domain.comURL Strip - Python

Пусть х, как любой вид ДВУ или CTLD

Входной пример:

http://www.domain.x/

www.domain.x

Выход:

domain.x

+0

** str.lstrip ([символов]) ** Возвращает копию строки с ведущими персонажами удалены. Аргумент chars - это строка, определяющая набор символов, которые нужно удалить. Если опущен или None, аргумент chars по умолчанию удаляет пробелы. Аргумент chars не является префиксом; скорее всего, все комбинации его значений лишены: '' >>> 'просторный' .lstrip() '' '' просторный ''' '' >>>' www.example.com'.lstrip ('cmowz.') '' '' 'example.com' '' – doniyor

+0

Стоит отметить, что существуют также www-pub, www-groups, www2, www3 и другие www-префиксы – Romeno

ответ

4

Если вы действительно хотите использовать регулярные выражения вместо urlparse() или разделив строку:

>>> domain = 'http://www.example.com/' 
>>> re.match(r'(?:\w*://)?(?:.*\.)?([a-zA-Z-1-9]*\.[a-zA-Z]{1,}).*', domain).groups()[0] 
example.com 

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

Для поддержки доменов, как 'co.uk', можно сделать следующее:

>>> p = re.compile(r'(?:\w*://)?(?:.*?\.)?(?:([a-zA-Z-1-9]*)\.)?([a-zA-Z-1-9]*\.[a-zA-Z]{1,}).*') 
>>> p.match(domain).groups() 

('Google', 'CO.UK')

Таким образом, вы должны проверить результат для домены вроде «co.uk», и снова присоединить результат в таком случае. Нормальные домены должны работать нормально. Я не мог заставить его работать, когда у вас несколько поддоменов.

Однострочник без регулярных выражений или фантазии модулей:

>>> domain = 'http://www.example.com/' 
>>> '.'.join(domain.replace('http://','').split('/')[0].split('.')[-2:]) 
+0

Мне удалось вставить неправильное регулярное выражение в мой первоначальный пост, но теперь он отредактирован с правильным. – geertjanvdk

+0

принимает ли он с http: // тоже? – Natsume

+0

@Natsume: Ну, да, как показывает пример. – geertjanvdk

7

Не следует использовать регулярное выражение, используйте urlparse, чтобы получить netloc

>>> x = 'http://www.domain.com/' 
>>> from urlparse import urlparse 
>>> o = urlparse(x) 
>>> o 
ParseResult(scheme='http', netloc='www.domain.com', path='/', params='', query='', fragment='') 
>>> 

, а затем

>>> o.netloc 
'www.domain.com' 
>>> if o.netloc.startswith('www.'): print o.netloc[4:] 
... 
domain.com 
>>> 
+3

'o.netloc.startswith ('www.') 'будет более уместным, чем' 'www 'в o.netloc' –

+0

@ Джанна Карила: Спасибо, Янне. Потерял это полностью в быстром ответе. То есть, конечно, правильный путь, а не тот, который я представил. Это неверно. – pyfunc

+0

python 3.5: from urllib.parse import urlparse – firephil

1

Вот один из способов сделать это:

>>>import re 
    >>>str1 = 'http://www.domain.x/' 
    >>>p1 = re.compile('http://www.|/') 
    >>>out = p1.sub('',str1) 
+0

Приятный, но он не охватывает, где «www» будет отсутствовать URL-адрес. – geertjanvdk

+0

можно использовать match from re как показано ниже, чтобы проверить, существует ли требуемая подстрока 'www': >>> print p1.match ("www") – user1242393

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