Reputation: 2989
I have a string/pattern like this:
[xy][abc]
I try to get the values contained inside the square brackets:
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.
Upvotes: 8
Views: 12713
Reputation: 15944
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.
Upvotes: 3
Reputation: 20270
>>> import re
>>> re.findall("\[(.*?)\]", "[xy][abc]")
['xy', 'abc']
Upvotes: 5
Reputation: 38245
re.findall
is your friend here:
>>> import re
>>> sample = "[xy][abc]"
>>> re.findall(r'\[([^]]*)\]',sample)
['xy', 'abc']
Upvotes: 20