This looks pretty horrible... Junk in, junk out.
That said, if you know that you'll always have the same format for the city and state, and always have a nine digit zip, you may have a chance. work from the last field forward. Find the ZIP with a regex, then the city and state. After that, you'll have to make the assumption that whatever is in the next field over contains the street address. Good luck!
Update: I just noticed that you do have a five digit zip in there. It won't make that much difference in the accuracy ;)