Just escape the separator on the way in.
var inputs = ["String1", "Str@ing2", "String3"];
var joined = string.Join(inputs.Select(i => i.Replace("@", "@@"));
You can then split on single @
chars.
var split = Regex.Split(joined, "(?<!@)@(?!@)");
This uses zero-width negative lookbehind/lookahead patterns to assert the character before and after the @
is not another @
. You should run some tests on cases where @
is at the start or end of your input strings however.