regular expression

Paul McGuire ptmcg at austin.rr.com
Mon Nov 19 12:42:00 EST 2007


Sorry about your coffee cup!  Would you be interested in a pyparsing
rendition?

-- Paul


from pyparsing import *

def defineGrammar():
    ParserElement.setDefaultWhitespaceChars(" \t")

    ident = Word(alphanums+"_")
    LT,GT = map(Suppress,"<>")
    NL = LineEnd().suppress()

    real = Word(nums,nums+".")
    integer = Word(nums)
    quotedString = QuotedString('"')

    dataValue = real | integer | Word(alphas,alphanums) | quotedString
    dataDef = ident + ZeroOrMore(dataValue) + NL
    tagDef = Forward()
    tagDef << LT + ident + ZeroOrMore(dataValue) + NL + \
            Dict(ZeroOrMore(Group(dataDef) | Group(tagDef))) + GT + NL
    tagData = Dict(OneOrMore(Group(tagDef)))
    return tagData

results = defineGrammar().parseString(TESTTXT)
print( results.dump() )
print results.REAPER_PROJECT.TRACK.keys()
print results.REAPER_PROJECT.TRACK.PANENV2
print results.REAPER_PROJECT.TRACK.PANENV2.ACT


prints out:

[['REAPER_PROJECT', '0.1', ['METRONOME', '6', '2.000000', ['SAMPLES',
'', '']], ['TRACK', ['MAINSEND', '1'], ['VOLENV2', ['ACT', '1']],
['PANENV2', ['ACT', '1']]]]]
- REAPER_PROJECT: ['0.1', ['METRONOME', '6', '2.000000', ['SAMPLES',
'', '']], ['TRACK', ['MAINSEND', '1'], ['VOLENV2', ['ACT', '1']],
['PANENV2', ['ACT', '1']]]]
  - METRONOME: ['6', '2.000000', ['SAMPLES', '', '']]
    - SAMPLES: ['', '']
  - TRACK: [['MAINSEND', '1'], ['VOLENV2', ['ACT', '1']], ['PANENV2',
['ACT', '1']]]
    - MAINSEND: 1
    - PANENV2: [['ACT', '1']]
      - ACT: 1
    - VOLENV2: [['ACT', '1']]
      - ACT: 1
['PANENV2', 'MAINSEND', 'VOLENV2']
[['ACT', '1']]
1



More information about the Python-list mailing list