Use the negation, ~
, to check to see if the upcoming street_name
is actually a street_suffix
.
from pyparsing import *
street_number = Word(nums)('street_number')
street_suffix = oneOf("ST RD DR LN AVE WAY")('street_suffix')
street_name = OneOrMore(~street_suffix + Word(alphas))('street_name')
address = street_number + street_name + street_suffix
result = address.parseString("444 PARK GARDEN LN")
print result.dump()
In addition, you don't have to use setResultsName
, you can simply use the syntax above. IMHO it leads to a much cleaner grammar definition.