Получить строку в скобках в 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'
Ответ 4
your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]
любезность: Регулярное выражение для возврата текста между скобками
Ответ 5
Вы также можете использовать
re.findall(r"\[([A-Za-z0-9_]+)\]", string)
если есть много случаев, которые вы хотели бы найти.
См. также дополнительную информацию:
Как найти все соответствия регулярному выражению в Python?
Ответ 6
Ты можешь использовать
import re
s = re.search(r"(\[.*?]", string)
print(s.group(0))