Получить строку в скобках в Python

У меня есть пример строки <alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card] ...>, created=1324336085, description='Customer for My Test App', livemode=False>

Мне нужно только значение cus_Y4o9qMEZAugtnW и NOT card (которое находится внутри другого [])

Как я могу сделать это самым простым способом в Python? Может быть, с помощью RegEx (что мне не нравится)?

Ответы

Ответ 1

Как насчет:

import re

s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m = re.search(r"\[([A-Za-z0-9_]+)\]", s)
print m.group(1)

Для меня это печатает:

cus_Y4o9qMEZAugtnW

Обратите внимание, что вызов re.search(...) находит первое совпадение с регулярным выражением, поэтому он не находит [card], если вы не повторите поиск во второй раз.

Изменить: регулярное выражение здесь представляет собой литерал raw string, что в основном означает, что обратные косые черты не рассматриваются как специальные символы и передаются методу re.search() без изменений. части регулярного выражения:

  • \[ соответствует буквенному символу [
  • ( начинает новую группу
  • [A-Za-z0-9_] - это набор символов, соответствующий любой букве (заглавной или строчной), цифре или подчеркиванию
  • + один или несколько раз соответствует предыдущему элементу (набору символов).
  • ) завершает группу
  • \] соответствует буквенному символу ]

Изменить: Как указал D K, регулярное выражение может быть упрощено до:

m = re.search(r"\[(\w+)\]", s)

так как \w представляет собой специальную последовательность, которая означает ту же самую вещь, что и [A-Za-z0-9_] в зависимости от настроек re.LOCALE и re.UNICODE.

Ответ 2

Это должно выполнить задание:

re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]

Ответ 3

Вы можете использовать str.split, чтобы сделать это.

s = "<alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card]\
 ...>, created=1324336085, description='Customer for My Test App',\
 livemode=False>"
val = s.split('[', 1)[1].split(']')[0]

Тогда имеем:

>>> val
'cus_Y4o9qMEZAugtnW'

Ответ 6

Ты можешь использовать

import re

s = re.search(r"(\[.*?]", string)
print(s.group(0))