8

I have a string/pattern like this:

[xy][abc]

I try to get the values contained inside the square brackets:

  • xy
  • abc

There are never brackets inside brackets. Invalid: [[abc][def]]

So far I've got this:

import re
pattern = "[xy][abc]"
x = re.compile("\[(.*?)\]")
m = outer.search(pattern)
inner_value = m.group(1)
print inner_value

But this gives me only the inner value of the first square brackets.

Any ideas? I don't want to use string split functions, I'm sure it's possible somehow with RegEx alone.

Patric
  • 2,583
  • 8
  • 32
  • 54

3 Answers3

20

re.findall is your friend here:

>>> import re
>>> sample = "[xy][abc]"
>>> re.findall(r'\[([^]]*)\]',sample)
['xy', 'abc']
MattH
  • 35,418
  • 10
  • 81
  • 84
5
>>> import re
>>> re.findall("\[(.*?)\]", "[xy][abc]")
['xy', 'abc']
beerbajay
  • 18,464
  • 6
  • 54
  • 74
3

I suspect you're looking for re.findall.

See this demo:

import re
my_regex = re.compile(r'\[([^][]+)\]')
print(my_regex.findall('[xy][abc]'))
['xy', 'abc']

If you want to iterate over matches instead of match strings, you might look at re.finditer instead. For more details, see the Python re docs.

Wiktor Stribiżew
  • 561,645
  • 34
  • 376
  • 476
Edward Loper
  • 14,489
  • 7
  • 42
  • 50