4

例如,我有一个 URL:

http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5

从这个网址我只想提取' asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5'我怎么能这样做?

我仍在学习正则表达式,但无法解决上述问题。任何建议,将不胜感激。

4

3 回答 3

10

您可以使用urlparse假设asset.epx是相同的:

>>> import urlparse
>>> url = 'http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5'
>>> res = urlparse.urlparse(url)
>>> print 'asset.epx?'+res.query
asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5

如果您需要来自 url 的其他信息,这很有用(您可以print res查看可以获得的其他信息;))

但是,如果您使用的是 Python 3,则必须执行from urllib.parse import urlparse.

于 2013-07-17T09:13:36.087 回答
8

在此特定示例中,拆分字符串就足够了:

url.split('/')[-1]

如果你有一个更复杂的 URL,我会推荐yarl 库来解析它:

>>> import yarl  # pip install yarl
>>> url = yarl.URL('http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5')
>>> url.path_qs
'/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5'

你也可以使用内置urllib.parse库,但我发现一旦你开始做复杂的事情,它就会妨碍你:

>>> url.update_query(asd='foo').with_fragment('asd/foo/bar')
URL('http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5&asd=foo#asd/foo/bar')
于 2013-07-17T09:11:05.837 回答
3

根据 Python 的版本,您需要urlparsePython 2.x ( http://docs.python.org/2/library/urlparse.html ) 或urllib.parsePython 3.x ( http://docs.python.org /2/library/urlparse.html )。在 Python 3(我所有可用的)中,以下代码片段无需借助正则表达式即可实现您所需要的:

import urllib.parse

address = "http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5"
parsed = urllib.parse.urlsplit(address)
print("{}?{}".format(parsed.path.split("/")[-1], parsed.query)

这里的输出是“asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5”。

于 2013-07-17T09:16:51.237 回答