For your requirements, I see two options:
(1) Remove the initial prefix character, if present.
(2) Use a full regular expression to separate the string.
Both are illustrated in this code:
using System;
using System.Linq;
using System.Text.RegularExpressions;
class APP { static void Main() {
string s = "~Peter~Lois~Chris~Meg~Stewie";
// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }
// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }
// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
.OfType<Match>()
.ToList()
.ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
;
}}
The regular expression in #2 matches the delimiter character followed by a match group containing zero or more non-delimiter characters. The resultant matches are the delimited strings (including any empty strings). For each match, "match.Value" is the entire string including leading delimiter and "match.Groups[1].Value" is the first match group containing the delimiter free string.
For completeness, the third encoding (#3) is included showing the same regular expression method in #2, but in a LINQ coding style.
If you are struggling with regular expressions, I highly recommend Mastering Regular Expressions, Third Edition by Jeffrey E. F. Friedl. It is, by far, the best aid to understanding regular expressions and later serves as an excellent reference or refresher as needed.