Get the string within brackets in Python


I have a sample string <alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card] ...>, created=1324336085, description='Customer for My Test App', livemode=False>

I only want the value cus_Y4o9qMEZAugtnW and NOT card (which is inside another [])

How could I do it in easiest possible way in Python?
Maybe by using RegEx (which I am not good at)?

Asked By: user993563



You could use str.split to do this.

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

Then we have:

>>> val
Answered By: David Alber

How about:

import re

s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m ="[([A-Za-z0-9_]+)]", s)

For me this prints:


Note that the call to finds the first match to the regular expression, so it doesn’t find the [card] unless you repeat the search a second time.

Edit: The regular expression here is a python raw string literal, which basically means the backslashes are not treated as special characters and are passed through to the method unchanged. The parts of the regular expression are:

  1. [ matches a literal [ character
  2. ( begins a new group
  3. [A-Za-z0-9_] is a character set matching any letter (capital or lower case), digit or underscore
  4. + matches the preceding element (the character set) one or more times.
  5. ) ends the group
  6. ] matches a literal ] character

Edit: As D K has pointed out, the regular expression could be simplified to:

m ="[(w+)]", s)

since the w is a special sequence which means the same thing as [a-zA-Z0-9_] depending on the re.LOCALE and re.UNICODE settings.

Answered By: srgerg

This should do the job:

re.match(r"[^[]*[([^]]*)]", yourstring).groups()[0]
Answered By: redShadow

You can also use

re.findall(r"[([A-Za-z0-9_]+)]", string)

if there are many occurrences that you would like to find.

See also for more info:
How can I find all matches to a regular expression in Python?

Answered By: Brandon Keith Biggs
your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]

courtesy: Regular expression to return text between parenthesis

Answered By: OmaL

You can use

import re

s ="[.*?]", string)
if s:
Answered By: shubham

How about this ? Example illusrated using a file:

f = open('abc.log','r')
content = f.readlines()
for line in content:
    m ="[(.*?)]", line)

Hope this helps:

Magic regex : [(.*?)]


[ : [ is a meta char and needs to be escaped if you want to match it literally.

(.*?) : match everything in a non-greedy way and capture it.

] : ] is a meta char and needs to be escaped if you want to match it literally.

Answered By: PanDe

This snippet should work too, but it will return any text enclosed within "[]"

re.findall(r"[([a-zA-Z0-9 ._]*)]", your_text)
Answered By: Syntax Error
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.