Extract zip code information from address, put into new column

Hi, suppose I have a colon delimeterd file with address field like this

blue:john's hospital new haven CT 92881-2322
yellow:La times copr red road los angeles CA90381 1302
red:las vegas hotel sand drive Las vegas NV,21221

How do I create a new field that contain the zip code information only, extracted from the address field
The problem is with error tolerance, in the survey data file, there are many ways people wrote zip codes:

CT 92881-2322 (subzip code with hyphen)
CT 92881 2322 (subzip code with space)
CT 92881 (no subzip code)
CT,92881 (extra comma)
CT92881 (no space between state and zip code)

Do you think you can do this in python or awk? Thanks.
The new zip code field should be in standardized format:
CT 92881-2322 if there is sub zip code
CT 92881 if the sub zip code is empty

Python

#!/usr/bin/env python

states=["CA","CT","NV"] #get all the states code here
for line in open("file"):
    line=line.strip()
    for s in states:        
        if s in line:
            print line[line.index(s):]

output:

 # ./test.py
CT 92881-2322
CA90381 1302
NV,21221
awk '
{
 left = statezip = $0
 sub( / [A-Z][A-Z].*/,"",left)
 sub( left " ","", statezip)
 state=substr(statezip,1,2)
 sub( /[A-Z][A-Z][, ]*/,"", statezip)
 sub( " ", "-", statezip)
 printf "%s:%s %s\n", left, state, statezip
}' "$FILE"

In the shell, if the file is not too big:

while IFS= read -r line
do
  left=${line% [A-Z][A-Z]*}
  statezip=${line#"$left "}
  zip=${statezip#??}
  state=${statezip%"$zip"}
  state=${state%[, ]}
  zip=${zip#[ ,]}
  case $zip in
    *\ *) lzip=${zip% *}
          rzip=${zip#* }
          zip=$lzip-$rzip
          ;;
  esac
  printf "%s:%s %s\n" "$left" "$state" "$zip"
done < "$FILE"

thanks a lot cfajohnson

But do you think sub( / [A-Z][A-Z].*/,"",left) is prone to unintentionally pick up patterns for example in street names, rather than in zip.

Is there a possible way to make it into sub(/ [two letter patern in the list.[0-9][0-9][0-9][0-9][0-9]/,"",left)

list="AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA,
HI, ID, IL, IN, IA, KS, KY, LA, ME, MD,
MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ,
NM, NY, NC, ND, OH, OK, OR, PA, RI, SC,
SD, TN, TX, UT, VT, VA, WA, WV, WI, WY"

thanks