0

我有一堆(如果我可以说很难看)url,我想使用 python 正则表达式来清理它们。所以,我的网址看起来像:

http://www.thisislink1.com/this/is/sublink1/1
http://www.thisislink2.co.uk/this/is/sublink1s/klinks
http://www.thisislinkd.co/this/is/sublink1/hotlinks/2
http://www.thisislinkf.com.uk/this/is/sublink1d/morelink
http://www.thisislink1.co.in/this/is/sublink1c/mylink
....

我想做的是清理这些网址,以便最终链接看起来像:

http://www.thisislink1.com
http://www.thisislink2.co.uk
http://www.thisislinkd.co
http://www.thisislinkf.de
http://www.thisislink1.us
....

我想知道如何以pythonic方式实现这一点。对不起,如果这是一个 101 问题 - 我是 pytho 正则表达式结构的新手。

4

4 回答 4

7

使用urlparse.urlsplit

In [3]: import urlparse    

In [8]: url = urlparse.urlsplit('http://www.thisislink1.com/this/is/sublink1/1')

In [9]: url.netloc
Out[9]: 'www.thisislink1.com'

在 Python3 中它会是

import urllib.parse as parse
url = parse.urlsplit('http://www.thisislink1.com/this/is/sublink1/1')
于 2012-12-07T12:40:57.653 回答
6

为什么使用正则表达式?

>>> import urlparse
>>> url = 'http://www.thisislinkd.co/this/is/sublink1/hotlinks/2'
>>> urlparse.urlsplit(url)
SplitResult(scheme='http', netloc='www.thisislinkd.co', path='/this/is/sublink1/hotlinks/2', query='', fragment='')
于 2012-12-07T12:41:47.063 回答
1

您应该像其他人建议的那样使用 URL 解析器,但为了完整起见,这里是一个使用正则表达式的解决方案:

import re

url='http://www.thisislink1.com/this/is/sublink1/1'

re.sub('(?<![/:])/.*','',url)

>>> 'http://www.thisislink1.com'

解释:

匹配之后的所有内容,包括第一个不以:or开头的正斜杠,/并将其替换为 nothing ''

(?<![/:]) # Negative lookbehind for '/' or ':'
/.*       # Match a / followed by anything
于 2012-12-07T12:45:47.903 回答
0

也许使用这样的东西:

result = re.sub(r"(?m)(http://(www)?\..*?)/", r"\1", subject)
于 2012-12-07T12:45:41.700 回答