Вы можете использовать регулярное выражение для совпадения местоположений в строке и добавления подстрок из предыдущего найденного индекса:
var text = "<p>AI.For example <p>A.I<p>BB.";
var result = new List<string>();
var rx = new Regex(@"(?=<p>\s*([A-Z])\1*\.)"); // The zero-length matching regex used in Regex.Split
var idx = 0;
foreach (Match m in rx.Matches(text)) { // Iterate over all matches
result.Add(text.Substring(idx, m.Index-idx)); // Add item to resulting array
idx = m.Index;
}
if (idx < text.Length - 1) { // Add trailing text after last match if present
result.Add(text.Substring(idx));
}
Вывод:
<p>AI.For example
<p>A.I
<p>BB.
Или используйте регулярное выражение, которое вы использовали для восстановления Regex.Split
в с редким символом , скажем \uFFFF
недопустимый символ UTF8, а затем разделите его на этот символ:
var text = "aaa<p>AI.For example <p>A.I<p>BB.b";
text = Regex.Replace(text, @"(?=<p>\s*([A-Z])\1*\.)", "\uFFFF");
var result = text.Split('\uFFFF');
Console.WriteLine(string.Join("\n", result)); // => [aaa<p>AI.For example, <p>A.I, <p>BB.b]
См. C# демо .