Semin's 10th goal of the season just 66 seconds into the game put the Hurricanes ahead to stay and Staal's tally off a Semin assist early in the final frame iced the victory for Carolina, which won for the first time since March 12.
Justin Peters turned aside 34-of-35 shots for the second-place Hurricanes, who pulled to within four points of Southeast Division-leading Winnipeg.
Tuomo Ruutu added two assists for Carolina.
Easer Egg Roll brings thousands to White House
Yosemite climber falls 30 feet, suffers major injuries