The Cardinals chipped away at Jose Fernandez, compiling nine hits off the Miami ace in 4 2/3 innings, and they held a 5-3 lead before the game was halted by rain midway through the sixth inning.
Lance Lynn limited the Marlins to three runs while striking out eight for the Cards, before he was lifted for a pinch-hitter after 91 pitches.
Fernandez, Miami's Opening Day starter, allowed three runs in the first inning, and he had to labor while getting his pitch count up to 98. St. Louis got on the board quickly, with Kolten Wong singling to open the game and scoring on Daniel Descalso's triple. Matt Holliday added an RBI groundout, and Peter Bourjos delivered a run-scoring single.
"I wasn't throwing anything for a strike the way I wanted to," Fernandez said. "When I was, it was mask high."
The Marlins scored twice off Lynn in the third inning. Derek Dietrich and Garrett Jones each had run-scoring singles.
In the fourth inning, the Cardinals added two more runs, with one earned. Wong had an RBI single. Casey McGehee answered in the bottom of the fourth with a solo homer for Miami.
In the fifth, Bourjos' third hit of the game chased Fernandez.
Up next: The Marlins travel to Lake Buena Vista, Fla., on Wednesday to take on the Braves. Nathan Eovaldi will make his final Grapefruit League start, and his pitch count will approach 100. Atlanta will go with Julio Teheran. Several roster spots remain up for grabs, including Dietrich getting a look at second base with Rafael Furcal recovering from a strained left hamstring.
Joe Frisaro is a reporter for MLB.com. He writes a blog, called The Fish Pond. Follow him on Twitter @JoeFrisaro. This story was not subject to the approval of Major League Baseball or its clubs.