Для ваших требований я вижу два варианта:
(1) Удалите начальный префиксный символ, если имеется.
(2) Используйте полное регулярное выражение для разделения строки.
Оба кода проиллюстрированы в этом коде:
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+"'"))
;
}}
Регулярное выражение в # 2 соответствует символу-разделителю, за которым следует группа совпадений, содержащая ноль или более символов без разделителя. Результирующие совпадения - это строки с разделителями (включая любые пустые строки). Для каждого совпадения «match.Value» представляет собой всю строку, включая ведущий разделитель, а «match.Groups 1 .Value» является первой группой совпадений, содержащей свободную строку.
Для полноты информации включена третья кодировка (# 3), показывающая тот же метод регулярного выражения в # 2, но в стиле кодирования LINQ.
Если вы боретесь с регулярными выражениями, я настоятельно рекомендую Освоение регулярных выражений, третье издание Джеффри Э. Ф. Фридлом . Это, безусловно, лучшая помощь для понимания регулярных выражений, а затем она служит отличным справочником или освежающим при необходимости.