The world champion was well-positioned for the reduced bunch sprint into Cevio, and reacted quickly when Nikias Arndt (Team Sunweb) went long with 500m to go.
Sagan swung across the road to get into the German's wheel, and was then able to come around the outside as Arndt faded to take a comprehensive victory ahead of Michael Albasini (Orica-Scott) and Matteo Trentin (Quick-Step Floors), both of whom finished many bike lengths behind.
As for the overall standings, there was no change at the top, with Damiano Caruso maintaining his lead, and even managing to pick up a bonus second at an intermediate sprint late on.
How it happened
Stage five of the Tour de Suisse saw an aggressive start with no break able to go clear from the peloton until more than 70km into the race.
When the move eventually went clear, it consisted of Arman Kamyshev (Astana), Ben King (Dimension Data), Jelle Wallays (Lotto Soudal), Sam Bewley (Orica-Scott), Lars Petter Nordhaug (Aqua Blue Sport) and Jesper Asselman (Roompot-Nederlandse Loterij).
The leaders took an advantage of six minutes onto the major climb of the day the 19km-long Simplonpass.
However the ascent took its toll, and despite King pushing the pace, the leaders' advantage was down to 3-50 by the top of the climb with 100km still to race.
The long descent saw little change in the gap, but did see defending champion Miguel Angel Lopez (Astana) crashing hard, abandoning the race and having to be taken to hospital for checks.
The other climb of the day, the third category ascent to Druogno, saw the gap drop further, before UAE Team Emirates went to the front on the technical descent and the valley roads that followed, making sure the gap was down to 30 seconds with 30km remaining.
That gap wasn't big enough to survive to the finish, with Assleman and King fighting on to be the last to be caught with six kilometres remaining as the sprinters' teams massed on the front of the bunch.
Quick-Step Floors had control under the flamme rouge but Peter Sagan was poised, and reacted quickly as Nikias Arndt accelerated with 500m to go.
Sagan jumped onto Arndt's wheel, and as the German faded was able to come around, sprinting clear of the rest of the bunch to take a comfortable victory.
Tour de Suisse 2017, stage five: Bex to Cevio (222km)
1. Peter Sagan (Svk) Bora-Hansgrohe, in 5-15-50
2. Michael Albasini (Sui) Orica-Scott
3. Matteo Trentin (Ita) Quick-Step Floors
4. Patrick Bevin (NZl) Cannondale-Drapac
5. Niccolo Bonifazio (Ita) Bahrain-Merida
6. Michael Matthews (Aus) Team Sunweb
7. Sacha Modolo (Ita) UAE Team Emirates
8. Oscar Gatto (Ita) Astana
9. Aaron Gate (NZl) Aqua Blue Sport
10. Owain Doull (GBr) Team Sky, all at same time
General classification after stage five
1. Damiano Caruso (Ita) BMC Racing, in 12-08-35
2. Steven Kruijswijk (Ned) Team LottoNl-Jumbo, at 16 secs
3. Domenico Pozzovivo (Ita) Ag2r La Mondiale, at 25 secs
4. Simon Spilak (Slo) Katusha-Alpecin, at same time
5. Marc Soler (Spa) Movistar Team, at 32 secs
6. Mathias Frank (Sui) Ag2r La Mondiale, at 34 secs
7. Mikel Nieve (Esp) Team Sky, at 1-10
8. Rui Costa (Por) UAE Team Emirates, at 1-11
9. Valerio Conti (Ita) UAE Team Emirates, at 1-21
10. Tao Geoghegan Hart (GBr) Team Sky, at 1-38
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1