Zeichenfolgen zwischen anderen Zeichenfolgen extrahieren

Auf Stack Overflow gab’s heute eine Frage, wie man Strings innerhalb anderer Strings extrahiert.

Da ich nicht gesehen habe, dass es ein Duplikat ist, habe ich den Code neu geschrieben. Der Vollständigkeit halber deshalb hier den Code:

private const string Before = "SPECIALSTRING";
private const string After = "STRINGSPECIAL";

private static IEnumerable<string> GetStrings(string input)
{
    var pos = 0;

    while (pos < input.Length)
    {
        var start = input.IndexOf(Before, pos, StringComparison.Ordinal);
        if (start < 0) break;

        var end = input.IndexOf(After, start, StringComparison.Ordinal);
        if (end < start) break;

        var need = input.Substring(start + Before.Length, end - start - Before.Length);
        yield return need;

        pos = end + After.Length;
    }
}

Verwendung dann z.B. so:

private static void Main()
{
    const string input =
        @"blabla random-string-I-dont-need blabla
SPECIALSTRING
the-string-I-need
STRINGSPECIAL
blabla other-string-I-dont-need blabla
SPECIALSTRING
the-string-I-need
STRINGSPECIAL";

    var result = GetStrings(input);

    foreach (var s in result)
    {
        Console.WriteLine(s);
    }
}