I know that the dollar sign is used to match the character at the end of the string, to make sure that search does not stop in the middle of the string but instead goes on t
Note that ^ and $ are zero-width tokens. So, they don't match any character, but rather matches a position.
^ matches the position before the first character in a string.$ matches the position before the first newline in the string.So, the String before the $ would of course not include the newline, and that is why ([A-Za-z ]+\n)$ regex of yours failed, and ([A-Za-z ]+)$\n succeeded.
In simple words, your $ should be followed by a newline, and no other character.
If the pattern ends with a newline then $ usually matches before that character. That goes at least for Perl, PCRE, Java and .NET. (edit: as Tim Pietzker points out in a comment, \r is not considered a line break by .NET)
This was introduced, because input that is read from a line is terminated with a newline (at least in Perl), which can be conveniently ignored this way.
Use \z to signify the very end of the string (if it's supported by your regex engine).
Source