Updated

A day after hitting his first career grand slam, Gaby Sanchez had a pair of infield hits and matched his career best with four hits. The Florida Marlins' cleanup man is finding his stroke.

"I'm starting to feel better with my swing, that's for sure," Sanchez said after a 7-5 loss to the St. Louis Cardinals on Tuesday night. "Little things I've been doing, like working off the tee, they're starting to pay off for me. "

Sanchez is 6 for 10 the first two games of a four-game series and is batting .318 with four homers and 15 RBIs, tied for second on the team. He had four singles Tuesday, one of them off Fernando Salas (1-0) in the top of the seventh to put Florida ahead 5-4.

Sanchez, who leads the Marlins with 10 multihit games, missed a chance for five hits in the ninth when he flied out against rookie Eduardo Sanchez for the second out.

"I've been able to see his videos and see he throws hard," Gaby Sanchez said. "I was just trying to get that one pitch and drive it. He made the pitch and I just got a little bit under it."

Daniel Descalso hit his first career home run, a go-ahead three-run shot in the seventh inning, for the Cardinals. Matt Holliday hit a two-run homer in the first and had two hits, dropping his National League-leading average one point to .409.

Albert Pujols was 0 for 5 with his league-leading 10th double play ball and stranded six runners his first three at-bats, dropping his average to .231. Pujols is mired in a 4-for-25 slump (.160) and hasn't had an extra base hit in nine games.

Marlins starter Anibal Sanchez had a season-high six walks in 4 1-3 innings, but Florida kept it close by limiting St. Louis to one run in bases-loaded opportunities in the second and fifth innings.

"He made way too many pitches in the first three innings, so his pitch count was way up there," manager Edwin Rodriguez said. "But he battled.

"They don't swing at bad pitches, they make you throw strikes."

Descalso is getting regular playing time with third baseman David Freese and second baseman Skip Schumaker each on the 15-day disabled list. He's batting just .237 and isn't known for power — he had 27 homers in 1,596 career minor league at-bats — but pulled an 0-1 pitch from Clay Hensley over the right field wall with one out in the seventh.

"We had a chance all the way," Rodriguez said. "We had a chance, they had a chance. Somebody had to win. Hensley hung that breaking ball, and Descalso took care of it."

Sanchez allowed a hit and a walk in the ninth before finishing for his second save in two chances. Ryan Webb (0-3) gave up a hit and walk in the seventh for Florida, his second inning.

Ramirez singled with one out in the seventh for his first hit of the series, stole second and went to third on a wild pitch. Sanchez followed with his fourth straight hit to put the Marlins ahead.

Anibal Sanchez left with the bases loaded and one out in the fifth, his shortest outing of the season, but reliever Edward Mujica turned pinch-hitter Jon Jay's comebacker into a double play.

The Marlins scored twice without a hit off Kyle McClellan in the third, parlaying walks to John Buck and Emilio Bonafacio, a failed bunt defense play to load them on Sanchez' comebacker, a wild pitch and Chris Coghlan's run-scoring groundout.

Florida opened a two-run fourth with four straight singles. Buck had two RBIs and Greg Dobbs one.

Holliday's fourth homer put the Cardinals up 2-0 after one inning for the second straight game, but they missed a shot to break it open in the third with the bases loaded when Pujols grounded into a forceout at the plate and Holliday fouled out to first.

Notes: Marlins OF Logan Morrison, on the DL with a foot injury, may be close to a rehab assignment. Manager Edwin Rodriguez said Morrison is scheduled to take batting practice and perhaps shag some fly balls Wednesday. ... Cardinals manager Tony La Russa said SS Ryan Theriot, who led the majors with eight errors but was batting .306, has been a "significant plus" overall. ... The Cardinals have grounded into a major league-high 41 double plays. ... McClellan allowed four runs in five innings, his shortest outing in his first year in the rotation.