提取URL-python的一部分

提取URL-python的一部分,python,regex,url,python-2.7,Python,Regex,Url,Python 2.7,我有一个URL,例如: http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5 从这个Url中,我只想提取'asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5'我该怎么做 我仍在学习正则表达式,但我无法解决上述问题。如果您有任何建议,我们将不胜感激。在此特定示例中,拆分字符串就足够了: url.split('/')[-1] 如果您

我有一个URL,例如:

http://name.abc.wxyz:1234/Assts/asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5
从这个Url中,我只想提取'
asset.epx?id=F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5
'我该怎么做


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

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

url.split('/')[-1]
如果您有更复杂的URL,我建议您使用以下URL进行解析:

>>> 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')
您可以使用假定
资产。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
查看您可以获得的其他信息;),这将非常有用


但是,如果您使用的是Python3,则必须从urllib.parse导入urlprase,这取决于Python的版本,您需要Python2.x()中的
urlprase
,或者Python3.x()中的
urllib.parse
。在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”。

仅此url或其他url?是
asset.epx
始终相同吗?@Haidro根据我掌握的数据,它始终相同!!但我认为问题解决了…谢谢你的时间@张阳宇的问题解决了。也谢谢你@如果布雷特的回答解决了你的问题,并且你收到了这篇文章,你应该接受投票来回答你的问题。这是StackOverflow方式:@jdero Brett的答案是100%正确的,但Blender首先回答了它,当我单击“接受答案”时,它说我必须等待5分钟才能接受答案。所以,现在我做到了!!cheers@Blender如果我必须仅从中提取id,例如“F3F94D94-7232-4FA2-98EF-07sdfssfdsa3B5”,该怎么办。如何通过正则表达式实现它?您不需要使用正则表达式。当标准库中存在模块时,实现自己的代码与标准交互通常是一个坏主意。urlparse模块具有将查询字符串转换为字典或键值对列表的功能。它不是许多URL的通用解决方案。假设查询字符串(后面的部分?)甚至后面的部分#可以包含正斜杠。你的解决方案仍然会被它分割,返回错误的答案。这是获取URL部分的一个糟糕的解决方案。@TerryA提到的urlparse库是应该使用的。