On Mar 16, 4:29 am, Vlastimil Brom <vlastimil.b...@gmail.com> wrote: > 2009/3/16 Vlastimil Brom <vlastimil.b...@gmail.com>: > > > > > 2009/3/16 Stef Mientki <stef.mien...@gmail.com>: > >> hello, > > >> I need to parse a nested list, given as a string, like this > > >> line = " A [ B [ C+2 ] + 3 ] " > > > ... > > >> thanks, > >> Stef > > > there is a "nestedExpr" (and probably other options, I'm not aware of ...:-) > > ... > > regards > > vbr > > Well, I thought, there was something already there in the examples for > pyparsing, but couldn't find it first. > check the selective pyparsing evaluator, which also supports lists: > > http://pyparsing.wikispaces.com/file/view/parsePythonValue.py >
The OPs test cases aren't really valid Python lists, so nestedExpr will have to do: from pyparsing import oneOf, alphas, Word, nums, OneOrMore, nestedExpr # an element within the list can be: # - a single alphabetic letter # - one of + - * or / # - an unsigned integer element = oneOf(list(alphas+"+-*/")) | Word(nums) expr = OneOrMore(element | nestedExpr("[", "]", content=OneOrMore(element)) ) src = " A [ B [ C+2 ] + 3 ] " print expr.parseString(src) Prints: ['A', ['B', ['C', '+', '2'], '+', '3']] Note that this is an actual Python nested list, the []'s of the original string have been stripped away (they aren't needed, as the nested structure that was defined by the []'s is now represented as a data structure with actual nesting). Also, pyparsing is pretty forgiving about whitespace. This same parser, even though no whitespace is explicitly mentioned, will just as easily parse "A[B[C+2]+3]". -- Paul (More pyparsing info at http://pyparsing.wikispaces.com.) -- http://mail.python.org/mailman/listinfo/python-list