Skip to content Skip to sidebar Skip to footer

Splitting An Expression

I have to split a string into a list of substrings according to the criteria that all the parenthesis strings should be split . Lets say I have (9+2-(3*(4+2))) then I should get (4

Solution 1:

The eval is insecure, so you have to check input string for dangerous things.

>>> import re
>>> e = "(9+2-(3*(4+2)))"
>>> while '(' in e:
...     inner = re.search('(\([^\(\)]+\))', e).group(1)
...     e = re.sub(re.escape(inner), eval('str'+inner), e)
...     print inner,
... 
(4+2) (3*6) (9+2-18)

Solution 2:

Try something like this:

import re
a = "(9+2-(3*(4+2)))"
s,r = a,re.compile(r'\([^(]*?\)')
while('(' in s):
    g = r.search(s).group(0)
    s = r.sub(str(eval(g)),s)
    print g
    print s

Solution 3:

This sounds very homeworkish so I am going to reply with some good reading that might lead you down the right path. Take a peek at http://en.wikipedia.org/wiki/Polish_notation. It's not exactly what you want but understanding will lead you pretty close to the answer.


Solution 4:

i don't know exactly what you want to do, but if you want to add other operations and if you want to have more control over the expression, i suggest you to use a parser

http://www.dabeaz.com/ply/ <-- ply, for example


Post a Comment for "Splitting An Expression"