我应该如何使用python拆分和获取url中的一些id信息

我应该如何使用python拆分和获取url中的一些id信息,python,regex,url,python-requests,Python,Regex,Url,Python Requests,e、 g: 我想获取名称空间的id--'12345nmspc' 我是否必须使用RE(以及如何使用?),或者是否有Pythonic方法来执行此操作?您可以使用urlparse成功解析base\u url,然后访问路径以最终获取所需内容,例如 base_url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc' 由于名称空间不在固定位置,因此可以使用简单的正则表达式提取id,如下所示(假设名称空间始终存在): Python

e、 g:

我想获取名称空间的id--'12345nmspc'


我是否必须使用RE(以及如何使用?),或者是否有Pythonic方法来执行此操作?

您可以使用
urlparse
成功解析
base\u url
,然后访问路径以最终获取所需内容,例如

base_url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc'
由于
名称空间
不在固定位置,因此可以使用简单的正则表达式提取
id
,如下所示(假设
名称空间
始终存在):


Python为此提供了内置功能。在本例中,您可以这样解析:

>>> [namespaces_id] = re.findall(r'/namespaces/([^/]+)/?', path)
>>> namespaces_id
'12345nmspc'
>>>
无论发生什么情况,这都能正常工作,因为它隔离了路径,不依赖于id在固定位置的位置。

您可以使用,并对
名称空间进行正向查找。

import re
from urllib.parse import urlparse
base_url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc'
namespace_id = re.search(r'namespaces/(.+)', urlparse(base_url).path).group(1)
base_url = "127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc"
pattern = re.compile(r"\/namespaces\/((.)*)(\/)?")
match = re.search(pattern, base_url )
id = ""
if match.groups():
    id = match.groups()[0]
print(id)

Thx,但实际上,如果
base\u url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc/userid/001usr'
,这个解决方案失败了。比方说
namespaces
位置是不固定的。虽然这段代码可以解决这个问题,但它如何以及为什么解决这个问题会真正有助于提高你的帖子的质量,而且可能会得到更多的支持票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
base_url = "127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc"
pattern = re.compile(r"\/namespaces\/((.)*)(\/)?")
match = re.search(pattern, base_url )
id = ""
if match.groups():
    id = match.groups()[0]
print(id)
import re
base_url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc'

print(re.findall(r'(?<=namespaces/)[^/?]*', base_url))
['12345nmspc']