Sergio Aguero had put City ahead with a fine breakaway goal just after the hour having had another strike controversially ruled out - but Nacho Monreal equalised.
City twice hit the woodwork in the latter stages of normal time through Yaya Toure and Fernandinho but Sanchez, recently linked with City, pounced for a 101st-minute winner after a goalmouth scramble.
Arsenal's victory vindicated under-pressure Arsene Wenger's decision to play with three at the back for the second time in a week.
Relive the action on Standard Sport's blog!
Arsenal XI: Cech, Gabriel, Koscielny, Holding, Oxlade-Chamberlain, Ramsey, Xhaka, Monreal, Ozil, Sanchez, Giroud
Subs: Gibbs, Walcott, Iwobi, Welbeck, Bellerin, Martinez, Coquelin
Man City XI: Bravo, Jesus Navas, Kompany, Otamendi, Clichy, Toure, Fernandinho, De Bruyne, Silva, Sane, Aguero
Subs: Zabaleta, Fernando, Sterling, Kolarov, Caballero, Delph, Iheanacho
Referee: Craig Pawson
WHAT THEY SAID
Arsene Wenger: "It's a special experience and for us, I think we are focused, highly motivated.
"Maybe not at the maximum of our confidence ... but that is a good opportunity to show we are ready for a fight and how much we want to go to the final.
"Because it's maybe our only opportunity to get a trophy this season."
Pep Guardiola: "[The City owners] will not be happy. The expectation of the club is as high as possible, winning titles.
"And we are not able. We are not happy, I can completely understand.
"Winning titles helps you a lot. Winning helps you win more because you realize you have that experience.
"When you win a title, a final, there's a lot of stress, a lot of pressure. When you handle that, the next time will be easier."