Это должно охватывать все 3 ваших требования. Извините за форматирование; Мне пришлось пометить галочкой первые несколько строк, чтобы
отображался правильно.
string pattern = @"(?<!^| )((?<!\s) (?!\s))(?!\1)";
string[] inputs = { " AA A C D A Some Text here", // original
" AA A C D A Some Text here" // space before/after
};
foreach (string input in inputs)
{
string result = Regex.Replace(input, pattern, "#");
Console.WriteLine("Original: {0}\nResult: {1}", input, result);
}
Выход:
Original: AA A C D A Some Text here
Result: AA#A C#D A#Some Text here
Original: AA A C D A Some Text here
Result: AA#A C#D A Some Text here