After you breach the enemy walls in multiple areas (don't have to be as many as 8 in my experience I usually breach 3-4 and it works well on H/H AI) don't rush your breaching units in immediately. Then see which gap they leave open, and rush your main assault force in from there (usually the AI will heavily defend the area around the gate, leaving 1 unit at the city corners to flank). If your breaching units stand in front of the breaches without attacking it would cement any AI units attempting to hold the breach where they stand, thus your main assault force can flank them. If they turn away from the breach, your breaching units can rush in and flank them. Its a good way of holding enemy units stationary without casualties (you can also throw javelins, rocks, your missile of choice at them while you're standing around).

The AI will also have at least two of his better units in the city square (and posibly his general as well) at all times and 1-2 units in the streets further into the city so by units you will locally outnumber him possibly 2-1. Hastati should take on militia hoplites with relatively acceptable losses and AI will only have 1 hoplite if he keeps two hoplites in the city center. Make judicious use of your general's cav, take advantage of the fact that all your units can move faster and react faster than theirs (since they're in phalanx), you should be alright.