The problem is one of "context" for your regex pattern: the way you have written it is that it will find and match anything that looks like a chord reference anywhere in the text. What you will need to do is to think about what you need to do to determine when a match can be a chord reference and when it can't.
For example, if the text you have provided is completely representative of all of the text you will ever encounter, then you might be able to detect which type of line you are scanning: it would seem that there are at least 2 chords on the "chord" line and only chords on that line; where as the lyric line *may* have something lthat looks like a chord but is unlikely to have every "word" on the line look like a chord.
Therefore you could make 2 passes over the text: the first pass identifies the "chord" line and the the 2nd pass then splits just that line into the individual chords. Basically the patterns for both passes are exactly what you have now except the first pass one has a wrapper around it to require 2 or more matches. Therefore it might look something like:
[A-G] and the rest of your pattern up to (?=\s|$)
If you are using the .NET regex engine then you can actually use the "capture" level within each of the match groups to pick out the individual chords and do this in 1 pass. Otherwise, the above will match the "whole line" and you can use that as the text for your pattern to get the individual chords in the 2nd pass.