2

正規表現を使用してhttpおよび/またはwwwを削除し、http ://www.domain.com/domain.comに取り込むにはどうすればよいですか。

xを任意の種類のTLDまたはcTLDと見なします

入力例

http://www.domain.x/

www.domain.x

出力

domain.x

4

3 に答える 3

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
>>> 
于 2012-06-28T10:10:06.120 に答える
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:])
于 2012-06-28T10:28:14.873 に答える
1

これを行う方法の1つは次のとおりです。

    >>>import re
    >>>str1 = 'http://www.domain.x/'
    >>>p1 = re.compile('http://www.|/')
    >>>out = p1.sub('',str1)
于 2012-06-28T10:26:27.513 に答える