On Apr 11, 11:50 pm, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Wed, 11 Apr 2007 23:14:01 -0300, Qilong Ren <[EMAIL PROTECTED]> > escribió: > > > Thanks for reply. That actually is not what I want. Strings I am dealing > > with may look like this: > > s = 'a = 4.5 b = 'h' 'd' c = 4.5 3.5' > > What I want is > > a = 4.5 > > b = 'h' 'd' > > c = 4.5 3.5 > > That's a bit tricky. You have LHS = RHS where RHS includes all the > following text *except* the very next word before the following = (which > is the LHS of the next expression). Or something like that :) > > py> import re > py> s = "a = 4.5 b = 'h' 'd' c = 4.5 3.5" > py> r = re.compile(r"\w+\s*=\s*.*?(?=\w+\s*=|$)") > py> for item in r.findall(s): > ... print item > ... > a = 4.5 > b = 'h' 'd' > c = 4.5 3.5 > > -- > Gabriel Genellina
The pyparsing version is a bit more readable, probably simpler to come back later to expand definition of varName, for example. from pyparsing import Word,alphas,nums,FollowedBy,sglQuotedString,OneOrMore realNum = Word(nums,nums+".").setParseAction(lambda t:float(t[0])) varName = Word(alphas) LHS = varName + FollowedBy("=") RHSval = sglQuotedString | realNum | varName RHS = OneOrMore( ~LHS + RHSval ) assignment = LHS.setResultsName("LHS") + '=' + RHS.setResultsName("RHS") s = "a = 4.5 b = 'h' 'd' c = 4.5 3.5" for a in assignment.searchString(s): print a.LHS, '=', a.RHS prints: ['a'] = [4.5] ['b'] = ["'h'", "'d'"] ['c'] = [4.5, 3.5] -- http://mail.python.org/mailman/listinfo/python-list