Icon Style Pattern Matching in Python

This is the Icon example translated into Python using an implementation based on operator overloading:

from string import uppercase, digits
postalcode = "H3G 1V7"
if postalcode ^ (AnyOfP(uppercase) & AnyOfP(digits) & \
                 AnyOfP(uppercase)) >> "part1" &      \
                IsP(" ") [0:1] &                      \
                (AnyOfP(digits) & AnyOfP(uppercase) & \
              AnyOfP(digits)) >> "part2" & AtTheEndP():
   postalcode = lastMatch() ["part1"] +               \
                lastMatch() ["part2"]
   print postalcode
else:
   print "Invalid postalcode", postalcode
All About Pattern Matching Sam Wilmott
Slide 21 of 37        www.wilmott.ca