Как я должен разделить и получить некоторые идентификаторы в URL с python - PullRequest
0 голосов
/ 30 марта 2020

Например:

base_url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc'

Я хочу забрать Имена пространств имен --- '12345nmsp c' ;

Должен ли я использовать RE (и КАК?), Или есть Pythoni c способы сделать это?

Ответы [ 4 ]

1 голос
/ 30 марта 2020
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)
0 голосов
/ 30 марта 2020

Вы можете использовать re.findall с положительным обзором сзади для namespaces/:

import re
base_url='127.0.0.1:8000/api/v1/alert/zones/zz123/namespaces/12345nmspc'

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

Выход:

['12345nmspc']
0 голосов
/ 30 марта 2020

Python имеет встроенную функциональность для этого, urllib . В этом случае вы можете выполнить синтаксический анализ следующим образом:

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)

Это будет работать практически независимо от того, что, потому что оно изолирует путь и не зависит от положения идентификатора в фиксированном месте.

0 голосов
/ 30 марта 2020

Вы можете использовать urlparse, чтобы успешно проанализировать base_url, а затем получить доступ к пути, чтобы в конечном итоге взять то, что вы хотите, что-то вроде

>>> import urlparse
>>> path = urlparse.urlparse(base_url).path
>>> segments = path.split('/')
>>> segments[-1]
'12345nmspc'
>>> segments[-2]
'namespaces'
>>> 

Поскольку namespaces не находится в фиксированной позиции Вы можете использовать простое регулярное выражение для извлечения id, как показано ниже (при условии, что namespaces присутствует всегда):

>>> [namespaces_id] = re.findall(r'/namespaces/([^/]+)/?', path)
>>> namespaces_id
'12345nmspc'
>>>
...