Your question on the last line of your post made me cringe because there's no guarantee that the user would type those suffixes in an address (they're totally optional and formats vary widely). I've seen this a lot before and detecting keywords isn't the way to go. (Besides, what about a shop named "Bicycle Street"?)
I encourage you to look at my answer over here where I discuss the difficulty of identifying or parsing addresses. There are some examples which show how some crazy-looking addresses are still valid addresses, and not place names.
Further, here's a brief article describing the difficulty in using regular expressions (or common patterns) to identify and extract addresses -- similar to what you are seeking to do.
The reason Google's geocoding API is always giving you a result is because it does address approximation -- if the address doesn't exist, Google does what it does best: it searches for something to show you anyway, something that you're looking for. If you type an address that doesn't exist, it'll still show results because it interpolates and makes up the data so you can still have something to go on. This can be useful sometimes, but here it can bite you.
I'd recommend looking for a service which geocodes only valid addresses, and if no results, then use the places API. For example, LiveAddress API by SmartyStreets (where I work) will only return results if the address can be parsed and actually exists. Look at some of the demos to see what I mean.
This should do what you're looking to accomplish.