Get the string within brackets in Python

PythonRegexBrackets

Python Problem Overview


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)?

Python Solutions


Solution 1 - Python

How about:

import re

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

For me this prints:

cus_Y4o9qMEZAugtnW

Note that the call to re.search(...) 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 re.search() 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 = re.search(r"\[(\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.

Solution 2 - Python

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',\
 livemode=False>"
val = s.split('[', 1)[1].split(']')[0]

Then we have:

>>> val
'cus_Y4o9qMEZAugtnW'

Solution 3 - Python

This should do the job:

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

Solution 4 - Python

your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]

courtesy: https://stackoverflow.com/questions/4894069/regular-expression-to-return-text-between-parenthesis

Solution 5 - Python

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: https://stackoverflow.com/questions/4697882/how-can-i-find-all-matches-to-a-regular-expression-in-python

Solution 6 - Python

You can use

import re

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

Solution 7 - Python

How about this ? Example illusrated using a file:

f = open('abc.log','r')
content = f.readlines()
for line in content:
    m = re.search(r"\[(.*?)\]", line)
    print m.group(1)
    

Hope this helps:

Magic regex : \[(.*?)\]

Explanation:

\[ : [ 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.

Solution 8 - Python

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

re.findall(r"\[([a-zA-Z0-9 ._]*)\]", your_text)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser993563View Question on Stackoverflow
Solution 1 - PythonsrgergView Answer on Stackoverflow
Solution 2 - PythonDavid AlberView Answer on Stackoverflow
Solution 3 - PythonredShadowView Answer on Stackoverflow
Solution 4 - PythonOmaLView Answer on Stackoverflow
Solution 5 - PythonBrandon Keith BiggsView Answer on Stackoverflow
Solution 6 - PythonshubhamView Answer on Stackoverflow
Solution 7 - PythonPanDeView Answer on Stackoverflow
Solution 8 - PythonGaurav PadaweView Answer on Stackoverflow