Here's a source.
var source = new[] { 'a', 'b', ';', 'c', 'd', 'e', ';' }.ToObservable();
Here's what you're asking for:
var groups = source
// Group the elements by some constant (0)
// and end the group when we see a semicolon
.GroupByUntil(x => 0, group => group.Where(x => x == ';'))
Here's a way to use it:
groups
// Log that we're on the next group now.
.Do(x => Console.WriteLine("Group: "))
// Merge / Concat all the groups together
// {{a..b..;}..{c..d..e..;}} => {a..b..;..c..d..e..;}
.Merge()
// Ignore the semicolons? This is optional, I suppose.
.Where(x => x != ';')
// Log the characters!
.Do(x => Console.WriteLine(" {0}", x))
// Make it so, Number One!
.Subscribe();
Output:
Group:
a
b
Group:
c
d
e