Regular expression, split string by capital letter but ignore TLA
((?<=[a-z])[A-Z]|[A-Z](?=[a-z]))
or its Unicode-aware cousin
((?<=\p{Ll})\p{Lu}|\p{Lu}(?=\p{Ll}))
when replaced globally with
" $1"
handles
TodayILiveInTheUSAWithSimon USAToday IAmSOOOBored
yielding
Today I Live In The USA With Simon USA Today I Am SOOO Bored
In a second step you'd have to trim the string.
any uppercase character that is not followed by an uppercase character:
Replace(string, "([A-Z])(?![A-Z])", " $1")
Edit:
I just noticed that you're using this for enumerations. I really do not encourage using string representations of enumerations like this, and the problems at hand is a good reason why. Have a look at this instead: http://www.refactoring.com/catalog/replaceTypeCodeWithClass.html