tags:

views:

68

answers:

3

From the below string, I want to extract the words between delimters [ ] like 'Service Current','Service','9991','1.22':

str='mysrv events Generating Event Name [Service Current], Category [Service] Test [9991] Value [1.22]'

How can I extract the same in python?

Thanks in advance Kris

+11  A: 

First, avoid using str as a variable name. str already has a meaning in Python and by defining it to be something else you will confuse people.

Having said that you can use the following regular expression:

>>> import re
>>> print re.findall(r'\[([^]]*)\]', s)
['Service Current', 'Service', '9991', '1.22']

This works as follows:

\[   match a literal [
(    start a capturing group
[^]] match anything except a closing ]
*    zero or more of the previous
)    close the capturing group
\]   match a literal ]

An alternative regular expression is:

r'\[(.*?)\]'

This works by using a non-greedy match instead of matching anything except ].

Mark Byers
+ 1 The expression becomes easier if you just make it non-greedy: `\\[(.*?)\\]`. [Link to `re.findall()`](http://docs.python.org/library/re.html#re.findall), [link to `re`](http://docs.python.org/library/re.html)
Felix Kling
@Felix: Added, thanks.
Mark Byers
+1  A: 
re.findall(r'\[([^\]]*)\]', str)
Vineet
+2  A: 

you can use regex

import re
s = re.findall('\[(.*?)\]', str)
joaquin